在IE中返回“未知”的类型

时间:2012-06-11 15:04:45

标签: javascript internet-explorer typeof

我有一个窗口,在关闭之前我刷新底层页面。

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

如果我离开原始的开始页面,此代码会抛出“Permission Denied”错误。

调试代码显示typeof(opener.Refresh)等于“unknown”而不是预期的“undefined”

据我所知“unknown”不是typeof的返回值之一,那么该值的返回方式和原因是什么?

更多信息

我通过将检查更改为:

来避免错误
if(opener && typeof(opener.Refresh) == 'function')

然而,像这样的例子(detecting-an-undefined-object-property-in-javascript)似乎并未将“未知”因素纳入等式中。

3 个答案:

答案 0 :(得分:19)

根据duplicate question at Bytes,typeof值unknown会与date一起添加到JScript版本8中。

罗伯特·尼曼对博客的comment也可以解释为:

  

当有问题的对象打开时,Internet Explorer会显示“未知”   COM +桥的另一面。你可能不知道这一点或意识到   这个,但MS的XMLHTTP对象是不同的COM +对象的一部分   实现IUnknown;当你在它上面调用方法时,你就是这样做的   一个COM桥,而不是调用本机JavaScript。

     

如果您尝试测试或访问某些内容,基本上就是MS的答案   这不是JScript引擎的真正部分。

答案 1 :(得分:6)

尝试in运算符。我有同样的问题(使用applet),我使用in解决了它:

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

答案 2 :(得分:5)

ECMAScript specification表示对于宿主对象,typeof运算符的返回值为:

  

实施定义,但可能不是“undefined”,“boolean”,   “number”或“string”。

我相信只会在Internet Explorer中返回unknown值。有趣的是,MSDN没有提到它:

  

typeof返回有六个可能的值:“number”,“string”,   “boolean”,“object”,“function”和“undefined。”