Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “退货类型”;“未知”;在IE中_Javascript_Internet Explorer_Typeof - Fatal编程技术网

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创建的。