Javascript “退货类型”;“未知”;在IE中
我有一个窗口,在关闭窗口之前,我会刷新底层页面Javascript “退货类型”;“未知”;在IE中,javascript,internet-explorer,typeof,Javascript,Internet Explorer,Typeof,我有一个窗口,在关闭窗口之前,我会刷新底层页面 if(opener && typeof(opener.Refresh) != 'undefined') { opener.Refresh(); } 如果我离开原来的打开页面,这段代码将抛出一个“权限被拒绝”错误 调试代码发现typeof(opener.Refresh)等于“unknown”,而不是预期的“undefined” 据我所知,“未知”不是typeof的返回值之一,那么如何以及为什么返回此值? 进一步信息 我通过将
if(opener && typeof(opener.Refresh) != 'undefined')
{
opener.Refresh();
}
如果我离开原来的打开页面,这段代码将抛出一个“权限被拒绝”错误
调试代码发现typeof(opener.Refresh)
等于“unknown”,而不是预期的“undefined”
据我所知,“未知”不是typeof
的返回值之一,那么如何以及为什么返回此值?
进一步信息
我通过将支票更改为:
if(opener && typeof(opener.Refresh) == 'function')
但是,像这样的例子()似乎没有将“未知”因素考虑到等式中。表示对于主机对象,typeof
运算符的返回值为:
定义的实现除外,不能是“未定义的”
,“布尔值”,
“number
”或“string
”
我相信unknown
值只有在Internet Explorer中才会返回。有趣的是,他没有提到:
typeof返回六个可能的值:“number”,“string,”
“布尔”、“对象”、“函数”和“未定义”
根据a,值的类型unknown
与date
一起添加到JScript版本8中
罗伯特·尼曼(Robert Nyman)的一篇博客文章也可以解释如下:
当相关对象处于打开状态时,Internet Explorer显示“未知”
COM+桥的另一侧。你可能不知道或者没有意识到
但MS的XMLHTTP对象是另一个COM+对象的一部分
实施IUnknown;当你调用它的方法时,你是在重复
COM网桥,不调用本机JavaScript
基本上,如果你尝试测试或访问某个东西,这就是MS的答案
这不是JScript引擎的真实部分
在
操作符中尝试。我也遇到了同样的问题(小程序),我在
中使用解决了这个问题:
if("Refresh" in opener) {
opener.Refresh();
}
你知道在什么情况下“未知”会被返回吗?恐怕不知道。我找不到任何关于它的真实文件。这就是宿主对象的问题。没有标准,浏览器开发者几乎可以做任何他们想做的事情。@Brett在许多typeof=='unknown'
中,例如typeof window.external.AutoScan
或window.external.CreateAuthorizationHeader
中提到了这一点。谢谢。我已经看到了这条评论,但是我无法将它与我看似简单的案例联系起来……所以最好的解决方案是永远不要检查!='未定义“
并检查它是否等于已知值之一?或者按照建议使用
中的?如果您确实需要检查未定义的(而不是上面编辑的函数存在),那么以下操作将起作用:(typeof myObj.myProp=='undefined'| | typeof myObj.myProp=='unknown')第一个JScript 8不存在;你是说5.8?其次,您如何从IE中获取“日期”
?它没有声明,但是该窗口是使用标准window.open创建的。