ホームページ >ウェブフロントエンド >jsチュートリアル >オブジェクトが window_javascript スキルの JS コードであるかどうかを判断します

オブジェクトが window_javascript スキルの JS コードであるかどうかを判断します

WBOY
WBOYオリジナル
2016-05-16 18:34:141200ブラウズ

[Ctrl A を押してすべて選択する 注: 外部 Js を導入する必要がある場合は、]

結果はさまざまです:
[object Object]IE6
[object Object]IE8
[object Window]firefox3.6
[object Window]opera10
[object DOMWindow]safai4. 04
[object global]chrome5.0.3.22
Heheming がそれをどのように決定するかを見て、setInterval というプロパティがあるかどうかを確認します。そうですね、あまり厳密ではないようですが、これ以上厳密にすることはできません。一般化された関数が IE の関数であるかどうかを判断することは不可能だからです。 Object.prototype.toString.call は常に [object Object] を出力します。 name 属性はありません。コピーするのが簡単すぎたため、破棄されました。
必死になって、その属性を 1 つずつチェックして、特別な属性があるかどうかを確認します。最後に、無限ループ内でそれ自体を参照する同じ名前のウィンドウ プロパティがあることを発見しました。これは IE では依然として問題です。

[Ctrl A を押してすべて選択 注: 外部 Js を導入する必要がある場合は、更新する必要があります
]

IE では false が表示され、他のブラウザでは true が表示されます。ただし、すべてのブラウザは次のように統一されています:

[Ctrl A すべて選択 注: 必要に応じて
外部 Js
]
を実行するにはリフレッシュが必要です。厳密な判定はありますか?ウィンドウは無限ループで自分自身を参照していることを忘れないでください。それは前の自分を参照していると言うべきです。したがって、次のことができます:
[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、
]
を実行して、最後に次のコードを取得します。 コードをコピーします。

var isWindow = function(obj){
return obj.window === obj.window.window
}

= ========== ===========ゴージャスな分割線======================
ありがとうインスピレーションを求めてアイヴォニーに!
コードをコピー コードは次のとおりです。

function isWindow( obj ){
if(typeof obj !== "object") return false;//オブジェクトである必要があります
var Expando = "dom" (new Date-0) //ランダム変数名を生成します
//グローバル解析コード, IE eval は元のスコープに対してのみ有効です
//詳細は http://www.javaeye.com/topic/519098 を参照してください
//また、HTML5 strict モードでは eval と with が禁止されているため、それらを捨ててください!
var js = document.createElement("script");
var head = document.getElementsByTagName("head")[0];
head.insertBefore(js,head.firstChild); js.text = Expando " = {​​};"
head.removeChild(js)
return window[expando] === obj[expando]
}
isWindow(window)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。