Проверка JavaScript, если переменная является окном

Вы знаете хороший способ проверить, является ли переменная объектом окна в JavaScript? Я попробовал:

var variable=window;
Object.prototype.toString.call(variable);

В Firefox это возвращается "[object Window]" но в IE "[object Object]" таким образом, это не правильный путь. Вы знаете точный способ проверить его?

11
задан tshepang 27 February 2014 в 14:56
поделиться

5 ответов

Да, но мне нужен способ проверки каждого окна, а не только текущего

Есть несколько способов сделать это. Самый простой способ - проверить наличие одного или двух известных свойств у объекта окна. Есть еще свойство self - для каждого окна можно проверить, что свойство self равно объекту окна:

myvar.self == myvar;
window.self == window;
frameElement.contentWindow.self == frameElement.contentWindow;
12
ответ дан 3 December 2019 в 07:10
поделиться

Как насчет просто:

isWindow = variable === window;

Тройное равенство предотвращает принуждение типов, которое в противном случае сделало бы это гораздо труднее.

1
ответ дан 3 December 2019 в 07:10
поделиться
if(variable == window)

Это, конечно, проверяет, является ли объект переменной этим окном (т.е. окном документа, выполняющего javascript).

В качестве альтернативы, вы можете попробовать что-то вроде этого:

if(variable.document && variable.location)

И проверить наличие нескольких полей и/или функций окна, чтобы вы были практически уверены, что это окно...

0
ответ дан 3 December 2019 в 07:10
поделиться

Поскольку окно является глобальной переменной, а глобальные переменные являются свойствами глобального объекта, window.window будет равно window . Итак, вы можете проверить:

if (mysteryVariable.window == mysteryVariable)
    ...

Проблема в том, что это можно обмануть, если у нас есть объект вроде этого:

var q = {};
q.window = q;

Если это маловероятно, вы можете использовать этот код.

-1
ответ дан 3 December 2019 в 07:10
поделиться
variable == window

Кто-то все еще может определить локальную переменную с именем window . Я не уверен, что есть способ противостоять всем подобным махинациям. Кто-то может создать объект, который копирует большинство свойств и функций окна, включая toString .

0
ответ дан 3 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: