Gegeben ist das mein Plugin auf jedem JS-Engine ausgeführt werden kann (in einem Browser oder nicht),Überprüfen Sie, ob es das Fensterobjekt
Wie weiß man, dass einige Variable tatsächlich das Objekt Browser
window
ist.Wie weiß ich, ob
someVar
auf den Browserwindow
Objekt verweist. Gibt es etwas inwindow
, dass ich überprüfen kann, ob es wirklich der Browserwindow
Objekt ist?Und wie überprüft man, ob der Browser
window
Objekt tatsächlich existiert und nicht nur irgendeinewindow
Variable, die ein Objekt enthält.Angenommen, Sie können nicht sagen, ob
someVar
window
selbst ist, und Sie wollen es gegen diewindow
realen Browser Objekt passen wiesomeVar === window
, wie Siewindow
bekommt, dass Sie sicher sind, es ist der Browserwindow
und nicht ein anderes Objekt aus einem äußeren Bereich namenswindow
, oder eine andere globale aus einer anderen Umgebung?
Nur ein bisschen mehr zu klären:
- Ich bin nicht für die globale der Umwelt suchen. Ich suche speziell den Browser
window
Objekt. - Ich überprüfe nicht, ob das Skript im Browser ausgeführt wird.
Ich kann nicht etwas tun, wie if(!window)
da window
konnte einfach irgendwo außerhalb des Bereichs erklärt ein anderes Objekt sein.
function someFunction(){
var window = {foo:'bar'};
(function(){
console.log(window); //{foo:'bar'}
}());
}
Ich kann nicht if(window.window === window)
überprüfen, da ich auch Selbstreferenzierung tun kann, und wie bereits erwähnt, window
ein Objekt von einem äußeren Umfang sein könnte:
var bar = {};
bar.bar = bar;
bar.bar.bar.bar.bar.bar === bar; //true
Und das Folgende nicht funktionieren, da Das Skript könnte in etwas anderem als dem globalen Raum eingebettet oder verkettet werden. this
könnte auch mit Aufrufen wie call()
, apply()
oder bind()
geändert werden.
//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({});
Ich habe das Gefühl, dass dies ein Duplikat ist, aber ich konnte nicht finden, wo ich es zuerst sah.
möglich Duplikat [Wie überprüft man, ob ein Skript unter node.js läuft?] (Http://stackoverflow.com/questions/4224606/how-to-check-whether-a-script-is-running-under-node-js) –
Es klingt wie du willst d Bestimmen Sie, ob Ihr Code in einem Browser ausgeführt wird oder nicht, indem Sie prüfen, ob ein Fenster vorhanden ist. Sie könnten versuchen, nach Features zu suchen, die ein Browser als Teil eines Fensters wie window.location.href implementiert, aber natürlich ist dies auch nicht fehlersicher. Wie wäre es mit der Feststellung, ob Sie eine gültige userAgent-Zeichenfolge zurückgeben können? – series0ne
Würde '(function() {return this}). Call (null)' immer funktionieren? –