1

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

在顶层窗口中,我有一个持久对象,我们称之为appData。在 iframe 中,我经常有类似的线条

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

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

if (parent.appData[someProperty].hasOwnProperty('a'))

我不应该吗?奇怪的是:它在我测试过的所有浏览器中都能正常工作,除了MSIE 10in对我来说很好,但我想知道我是否一直在“作弊”,或者这是否是 MSIE 10 中的错误。

jsFiddle 不处理 iframe,所以我不确定如何最好地用一个例子来证明这一点,抱歉。

4

1 回答 1

1

就个人而言,如果您担心释放脚本问题,我会以类似方式处理所有功能,包括内置功能,例如hasOwnProperty. 在那种特定情况下,它仍然可以在技术上被解释为对象上的函数,并且显然一些浏览器将其视为这样(IE10),而其他浏览器将其视为仍然可以访问的特殊情况(您提到的其他情况)。即使它适用于所有浏览器,我仍然会对此感到不对劲。

因此,不确定您的确切情况,但您可以改为执行以下操作:

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

否则,你总是可以用一个try..catch

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

于 2013-01-22T15:14:43.173 回答