我正在开发一个项目,该项目包含许多在父窗口中打开和关闭的iframe。我有一个需要在iframe之间定义和共享的对象。我遇到的问题是,当顶部创建对象的iframe关闭时,与之关联的函数将丢失。
我有没有办法在顶部定义一个可以从我的iframe访问的对象,即使原来的iframe超出了范围?
答案 0 :(得分:2)
您可以将该函数声明为iframe父窗口的成员:
window.parent.func = function() {alert("test")};
它们对每个iframe都可见:
window.parent.func();
答案 1 :(得分:2)
我们遇到了这个问题和这个问题,并最终通过在父文档的头部创建一个脚本标记来解决它。
所以而不是
window.parent.myfunc = function(){...}
我们做了
var script = window.parent.document.createElement('script');
script.text = "var myfunc = function(){...}";
window.parent.document.getElementsByTagName('head')[0].appendChild(script);
有点难看,但它有效。
答案 2 :(得分:1)
如果其他人偶然发现了这一点。我发现Javascript函数存储为引用,因此从iframe定义top.func = function(){...}将在顶部创建对函数的引用。这意味着如果iframe丢失,那么函数也是如此。
我的解决方案是创建一个隐藏在后台的iframe,并在需要定义该函数时创建。
答案 3 :(得分:1)
您可以在父窗口上通过其构造函数创建函数。 在这种情况下,函数的引用保留在父窗口上,可以从所有iFrame中调用
parent.func = new parent.Function('a','b','alert(a+b);');
每个iFrame都可以看到它
parent.func(3,4);
答案 4 :(得分:0)
一种解决方案可能是使用iframe的src查询字符串传递它们,或者将该对象存储在服务器会话中。