typeof возвращает «неизвестно» в IE

У меня есть окно, в котором перед закрытием я обновляю базовую страницу.

if(opener && typeof(opener.Refresh) != 'undefined')
{
    opener.Refresh();
}

Если бы я отошел от первоначальной начальной страницы, этот код"Permission Denied" ошибка.

Отладка кода показала, чтоtypeof(opener.Refresh) был равен"unknown" вместо ожидаемого"undefined".

Насколько я знаю"unknown" не является одним из возвращаемых значений дляtypeof, so how and why would this value be returned?

Further Information

Я избежал ошибки, изменив проверку на:

if(opener && typeof(opener.Refresh) == 'function')

Однако примеры, как это (обнаружения-ан-неопределенный-объект-свойство-в-JavaScript), похоже, не учитывается фактор «неизвестно» в уравнение.

 Marcel Korpel11 июн. 2012 г., 17:30
Какopener объявили?
 Brett Postin11 июн. 2012 г., 17:36
Он не объявлен, однако окно создается с помощью стандартного window.open.

Ответы на вопрос(3)

Решение Вопроса

повторяющийся вопрос в байтах, значение typeofunknown добавлен в JScript версии 8 вместе сdate.

комментарий к блогу Роберта Наймана также можно дать пояснения:

Internet Explorer displays “unknown” when the object in question is on the other side of a COM+ bridge. You may not know this or realize this, but MS’s XMLHTTP object is part of a different COM+ object that implements IUnknown; when you call methods on it, you’re doing so over a COM bridge and not calling native JavaScript.

Basically that’s MS’s answer if you try to test or access something that’s not a true part of the JScript engine.

 15 мая 2014 г., 18:33
Поэтому лучшее решение - никогда не проверять!== 'undefined' и проверить, что оно равно одному из известных значений? Или используйтеin оператор какTomaszDz предложил?
 14 дек. 2016 г., 20:46
Если вам действительно нужно проверить неопределенность (а не существование функции, как описано в OP, отредактированном выше), то сработает следующее: )
 Brett Postin11 июн. 2012 г., 17:29
Благодарю. Я уже видел этот комментарий, однако не мог связать его с моим, казалось бы, простым делом ...
 13 мая 2018 г., 03:12
Первый JScript 8 не существует; Вы имели в виду 5.8? Во-вторых, как вы получаете"date" из IE?

Спецификация ECMAScript утверждает, что для хост-объектов возвращаемое значениеtypeof оператор является:

Implementation-defined except may not be "undefined", "boolean", "number", or "string".

Я верюunknown значение возвращается только в Internet Explorer. Что интересно,MSDN не упоминает об этом:

There are six possible values that typeof returns: "number," "string," "boolean," "object," "function," and "undefined."

 Brett Postin11 июн. 2012 г., 17:20
Есть ли у вас какие-либо идеи, по каким сценариям «неизвестно»? будет возвращен?
 11 июн. 2012 г., 17:21
Понятия не имею, я боюсь. Я не могу найти никакой реальной документации по этому поводу. Это проблема с объектами хоста. Стандартов нет, поэтому разработчики браузеров могут делать все, что хотят.
 15 мая 2014 г., 18:23
@BrettPostin Целый рядtypeof == 'unknown' вwindow.external Напримерtypeof window.external.AutoScan или жеwindow.external.CreateAuthorizationHeader
 28 мар. 2018 г., 05:46
MSDN сейчас упоминает об этом.

Пытатьсяin оператор. У меня была такая же проблема (с апплетом), и я решил ее с помощьюin:

if("Refresh" in opener) {
    opener.Refresh();
}

Ваш ответ на вопрос