まず jQuery の $.isWindow 関数を見てみましょう:
function isWin(obj){
return obj && typeof obj === 'object' && 'setInterval' in obj; 🎜>
関数自体は非常に科学的であり、主に対象オブジェクトに setInterval 属性があるかどうかで判断されます。
ただし、規約がないと信頼できない可能性があるという問題があります。例:
o[' setInterval']=true;
console.log(isWin(o) ); // true
setInterval 属性をオブジェクト リテラルに設定すると、詐欺は成功します。
しかし、実際には、配列などの null 以外のオブジェクトは次の方法で偽装できます。 >
コードをコピーします
コードは次のとおりです。
上記のプロパティ属性のチェックと比較して、より適切な方法は、次の toString 関数を使用することです。判定するオブジェクト:
コードをコピー
コードは次のとおりです:
上記の関数は標準ブラウザでうまく動作します。しかし、それらは新たな互換性の問題ももたらします:
コードをコピー
コードは次のとおりです:
// サファリ
Object.prototype.toString.call(window)==='[object DOMWindow]'; // true
幸いなことに、主な問題は邪悪な IE にあります。常にパスです。これは IE での超自然的な出来事を思い出させます:
コードをコピー
コードは次のとおりです:
これを書くと、最終的な解決策が出てきたと思います:
コードをコピー
コードは次のとおりです: