我有一个窗口,在关闭之前我刷新底层页面。
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)似乎并未将“未知”因素纳入等式中。
答案 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。”