0

Firefox 22 及更高版本会发生简单的事情:如果您有一个带有名称的框架并将"name1"其重命名为,"name2"那么"name1"仍然会出现在window.frames数组中,但它的值将是undefined. 如果你打电话,同样的事情会发生delete window.frames["name1"];

问题是在这种情况下,您不能直接将任何项目放入frames具有名称的数组"name1"中。您也无法将该属性添加name1到该窗口对象中。这样做的唯一方法是将某些框架名称更改为"name1". "name1"然而,我们当前的应用程序逻辑需要同时访问同一个帧"name2"

这里是示例: http: //jsfiddle.net/tigeral/2VwFV/2/ 。请比较 Firefox 21 和 22 中的结果。

有谁知道如何使跟随代码工作的解决方法?

window.frames["name1"].name = "name2";
// what I need to do here ?    
window.frames["name1"] = window.frames["name2"];
alert(window.frames["name1"].name);

Ps 类似的问题已经发布在 Stack Overflow 上,但我的情况需要不同的解决方案。window.frames["frame_name"] 在框架被删除和重新添加时在 Firefox 中不起作用

4

1 回答 1

0

我找到了解决方案。如果您需要强制设置frames["name1"]一次值,您可以使用Object.defineProperty(frames, "name1", {value: frames["name2"]});句子。但是,如果您还想frames["name1"]为未来的变化解锁价值,那么您最好使用Object.defineProperty(frames, "name1", {value: frames["name2"], writable: true});

您可以在此处查看此解决方案:http: //jsfiddle.net/2VwFV/3/或以下示例:

window.frames["name1"].name = "name2";
Object.defineProperty(frames, "name1", {writable: true});    
window.frames["name1"] = window.frames["name2"];
alert(window.frames["name1"].name);

有关 Object.defineProperty(...) 方法的更多信息可以通过以下链接找到: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

于 2013-07-29T10:19:27.547 回答