Вы знаете хороший способ проверить, является ли переменная объектом окна в JavaScript? Я попробовал:
var variable=window;
Object.prototype.toString.call(variable);
В Firefox это возвращается "[object Window]"
но в IE "[object Object]"
таким образом, это не правильный путь. Вы знаете точный способ проверить его?
Да, но мне нужен способ проверки каждого окна, а не только текущего
Есть несколько способов сделать это. Самый простой способ - проверить наличие одного или двух известных свойств у объекта окна. Есть еще свойство self
- для каждого окна можно проверить, что свойство self
равно объекту окна:
myvar.self == myvar;
window.self == window;
frameElement.contentWindow.self == frameElement.contentWindow;
Как насчет просто:
isWindow = variable === window;
Тройное равенство предотвращает принуждение типов, которое в противном случае сделало бы это гораздо труднее.
if(variable == window)
Это, конечно, проверяет, является ли объект переменной этим окном (т.е. окном документа, выполняющего javascript).
В качестве альтернативы, вы можете попробовать что-то вроде этого:
if(variable.document && variable.location)
И проверить наличие нескольких полей и/или функций окна, чтобы вы были практически уверены, что это окно...
Поскольку окно
является глобальной переменной, а глобальные переменные являются свойствами глобального объекта, window.window
будет равно window
. Итак, вы можете проверить:
if (mysteryVariable.window == mysteryVariable)
...
Проблема в том, что это можно обмануть, если у нас есть объект вроде этого:
var q = {};
q.window = q;
Если это маловероятно, вы можете использовать этот код.
variable == window
Кто-то все еще может определить локальную переменную с именем window
. Я не уверен, что есть способ противостоять всем подобным махинациям. Кто-то может создать объект, который копирует большинство свойств и функций окна, включая toString
.