在IE中返回"未知"的类型

Bre*_*tin 22 javascript internet-explorer typeof

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

if(opener && typeof(opener.Refresh) != 'undefined')
{
    opener.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

如果我离开原始的开始页面,此代码将抛出"权限被拒绝"错误.

调试代码显示typeof(opener.Refresh)等于"未知"而不是预期的"未定义".

据我所知,"未知"不是其中一个返回值typeof,那么该值的返回方式和原因是什么?

更多的信息

我通过将检查更改为以下来避免错误:

if(opener && typeof(opener.Refresh) == 'function')
Run Code Online (Sandbox Code Playgroud)

但是这样的例子(在javascript中检测未定义的对象属性)似乎并未将"未知"因素纳入等式中.

Mar*_*pel 19

根据Bytes的一个重复问题,typeof值unknown被添加到JScript版本8,以及date.

一个评论由罗伯特·尼曼到博客上,也可以解释:

当有问题的对象位于COM +桥的另一侧时,Internet Explorer显示"未知".您可能不知道这一点或意识到这一点,但MS的XMLHTTP对象是实现IUnknown的不同COM +对象的一部分; 当你在它上面调用方法时,你是在COM桥上调用它而不是调用本机JavaScript.

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


Tom*_*ski 6

试试in算子.我有同样的问题(使用applet),我使用in以下方法解决了它:

if("Refresh" in opener) {
    opener.Refresh();
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ice 5

ECMAScript规范规定,对于主机对象的返回值typeof运算符是:

实现定义除了可能不是" undefined"," boolean"," number"或" string".

我相信这个unknown值只能在Internet Explorer中返回.有趣的是,MSDN没有提到它:

typeof返回有六个可能的值:"number","string","boolean","object","function"和"undefined".

  • 不知道我害怕.我找不到任何关于它的真实文档.这是主机对象的问题.没有标准,所以浏览器开发人员可以做他们想做的任何事情. (4认同)
  • @BrettPostin [`window.external`](http://msdn.microsoft.com/en-us/library/ie/ms535246(v=vs.85)) 中有很多 `typeof == 'unknown'`。 aspx) 例如 `typeof window.external.AutoScan` 或 `window.external.CreateAuthorizationHeader` (2认同)