私のプラグインが任意の JS エンジン (ブラウザー内かどうかに関係なく) で実行できることを考えると、
window一部の変数が実際にブラウザオブジェクトであることをどのように知ることができますか。someVarブラウザwindowオブジェクトを参照しているかどうかをどのように知ることができますか。それが本当にブラウザオブジェクトであるかwindowどうかを確認できるものはありますか?windowまた、オブジェクトを含む変数
windowだけでなく、ブラウザオブジェクトが実際に存在するかどうかを確認する方法。windowsomeVarが単独であるかどうかわからず、 のような実際のブラウザーオブジェクトwindowと照合したいとします。どのようにして、それがブラウザーであり、 という名前の外部スコープからの他のオブジェクトではないことを確認しますか?別の環境からグローバル?windowsomeVar === windowwindowwindowwindow
もう少し明確にするために:
- 私は環境のグローバルを探しているわけではありません。
window特にブラウザオブジェクトを探しています。 - スクリプトがブラウザで実行されているかどうかは確認していません。
スコープ外のどこかで宣言された別のオブジェクトである可能性があるif(!window)ため、次のようなことはできません。window
function someFunction(){
var window = {foo:'bar'};
(function(){
console.log(window); //{foo:'bar'}
}());
}
if(window.window === window)自己参照もできるため、確認できません。前述のようにwindow、外部スコープのオブジェクトである可能性があります。
var bar = {};
bar.bar = bar;
bar.bar.bar.bar.bar.bar === bar; //true
また、スクリプトはグローバル空間以外でラップまたは連結される可能性があるため、次の例は機能しない可能性があります。、または などのthis呼び出しで変更することもできます。call()apply()bind()
//Stand-alone, I can assume window is global since "this" is the global in global space
(function(window){
//window may not be window
}(this));
//But when this happens
someNamespace.someFunction = function(){
(function(window){
//window may not be window
}(this));
}
//or this:
someNamespace.someFunction.call({});
これは重複しているように感じますが、最初に見た場所を見つけることができませんでした。