gpt4 book ai didi

javascript - 使用 hasOwnProperty 释放脚本

转载 作者:行者123 更新时间:2023-11-28 02:29:10 25 4
gpt4 key购买 nike

我有一个包含 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,因此我不确定如何最好地用示例来演示这一点,抱歉。

最佳答案

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

因此,不确定您的具体情况,但您可以这样做:

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

否则,您始终可以用 try..catch 包围它

更新
当然,正如链接问题中提到的,您也可以使用 in

关于javascript - 使用 hasOwnProperty 释放脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com