23

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

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

如果我离开原来的打开页面,这段代码会抛出“Permission Denied”错误。

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

据我所知,“未知”不是 的返回值之一typeof那么如何以及为什么会返回该值?

更多信息

我通过将检查更改为:

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

然而,像这样的例子(detecting-an-undefined-object-property-in-javascript)似乎并没有将“未知”因素考虑在内。

4

3 回答 3

20

根据Bytes 上的一个重复问题,typeof 值unknowndate.

Robert Nyman 对博客的评论也可以解释:

当相关对象位于 COM+ 桥的另一侧时,Internet Explorer 显示“未知”。您可能不知道或意识到这一点,但 MS 的 XMLHTTP 对象是实现 IUnknown 的不同 COM+ 对象的一部分;当您在其上调用方法时,您是通过 COM 桥接器执行此操作,而不是调用本机 JavaScript。

如果您尝试测试或访问不是 JScript 引擎真正组成部分的东西,基本上这就是 MS 的答案。

于 2012-06-11T15:17:28.553 回答
6

尝试in运营商。我遇到了同样的问题(使用小程序),我使用以下方法解决了它in

if("Refresh" in opener) {
    opener.Refresh();
}
于 2013-03-01T07:26:10.223 回答
5

ECMAScript 规范规定,对于宿主对象,操作符的返回值为typeof

实现定义的 except 不能是“ undefined”、“ boolean”、“ number”或“ string”。

我相信这个unknown值只会在 Internet Explorer 中返回。有趣的是,MSDN并没有提及:

typeof 返回六个可能的值:“数字”、“字符串”、“布尔值”、“对象”、“函数”和“未定义”。

于 2012-06-11T15:10:47.990 回答