将javascript函数从iframe注入父窗口

Inject javascript function into parent window from iframe

本文关键字:注入 窗口 iframe javascript 函数      更新时间:2023-09-26

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

有没有一种方法可以在顶部定义一个对象,即使在原始iframe超出范围后,也可以从我的iframe访问该对象?

我们遇到了这个问题,并最终通过在父文档的头中创建脚本标记来解决它。

所以不是

window.parent.myfunc = function(){...}

我们做了

var script = window.parent.document.createElement('script');
script.text = "var myfunc = function(){...}";
window.parent.document.getElementsByTagName('head')[0].appendChild(script);

虽然有点难看,但它很管用。

您可以将函数声明为iframe父窗口的成员:

window.parent.func = function() {alert("test")};

他们将是可见的每个iframe:

window.parent.func();

您可以通过父窗口上的构造函数创建函数。在这种情况下,函数的引用保留在父窗口上,并且可以从所有iFrame 调用

parent.func = new parent.Function('a','b','alert(a+b);');

它将从每个iFrame 中可见

parent.func(3,4);

以防其他人偶然发现。我发现Javascript函数存储为引用,因此从iframe中定义top.func=function(){…}将创建对顶部函数的引用。这意味着如果iframe丢失,函数也会丢失。

我的解决方案是创建一个隐藏在后台的iframe,并在需要定义该函数时创建。

一种解决方案可能是使用iframe的src的查询字符串传递它们,或者将对象存储在服务器会话中。