我有一个包含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,所以我不确定如何用一个例子来证明这一点,对不起。
答案 0 :(得分:1)
就个人而言,如果您担心释放的脚本问题,我会同样处理所有函数,包括hasOwnProperty
等内置函数。在那个特定的情况下,它在技术上仍然可以被解释为对象的一个函数,显然有些浏览器会这样对待它(IE10),而其他浏览器则把它当作一个仍然可访问的特殊情况(你提到的其他人)。即使它在所有浏览器中都有效,我仍然觉得它错了。
因此,不确定您的具体情况,但您可以做一些类似的事情:
var appData = parent.appData || {};
var someProperty = appData[someProperty] || {};
if(someProperty[a] !== undefined){
..
}
否则,您始终可以使用try..catch
<强>更新强>
当然,您也可以使用in
,如链接问题中所述。