使用hasOwnProperty释放脚本

时间:2013-01-22 14:58:38

标签: javascript iframe internet-explorer-10

我有一个包含iframe的页面,我希望在iframe中用户可以导航到许多不同的页面 - 所有这些页面都与父页面在同一个域中。

在顶级窗口中,我有一个持久对象,我们称之为appData。在iframe中,我经常有像

这样的行
parent.appData[someProperty] = {a : 1, b : 2};

我知道释放脚本错误的一般问题,我理解我不应该尝试在这样的对象上调用任何任意方法,因为原始文档可能已经卸载,但肯定hasOwnProperty应该'是一种这样的方法,我应该允许在随后的子页面中说:

if (parent.appData[someProperty].hasOwnProperty('a'))
我不应该吗?这是奇怪的:它在我测试的每个浏览器中都有效,除了MSIE 10.我确实看到了IE9 "Can't execute code from freed script" when calling hasOwnProperty()的最近答案,确实使用in似乎对我的情况很好,但是我想知道我是否一直在“作弊”,或者这是否是MSIE 10中的一个错误。

jsFiddle没有处理iframe,所以我不确定如何用一个例子来证明这一点,对不起。

1 个答案:

答案 0 :(得分:1)

就个人而言,如果您担心释放的脚本问题,我会同样处理所有函数,包括hasOwnProperty等内置函数。在那个特定的情况下,它在技术上仍然可以被解释为对象的一个​​函数,显然有些浏览器会这样对待它(IE10),而其他浏览器则把它当作一个仍然可访问的特殊情况(你提到的其他人)。即使它在所有浏览器中都有效,我仍然觉得它错了。

因此,不确定您的具体情况,但您可以做一些类似的事情:

var appData = parent.appData || {};
var someProperty = appData[someProperty] || {};
if(someProperty[a] !== undefined){
    ..
}

否则,您始终可以使用try..catch

将其包围

<强>更新
当然,您也可以使用in,如链接问题中所述。