从iframe将javascript函数注入父窗口

时间:2012-03-02 19:17:55

标签: javascript iframe scope

我正在开发一个项目,该项目包含许多在父窗口中打开和关闭的iframe。我有一个需要在iframe之间定义和共享的对象。我遇到的问题是,当顶部创建对象的iframe关闭时,与之关联的函数将丢失。

我有没有办法在顶部定义一个可以从我的iframe访问的对象,即使原来的iframe超出了范围?

5 个答案:

答案 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查询字符串传递它们,或者将该对象存储在服务器会话中。