Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5-跨浏览器Iframe postmessage-父子通信_Javascript_Html_Cross Browser_Postmessage - Fatal编程技术网

Javascript HTML5-跨浏览器Iframe postmessage-父子通信

Javascript HTML5-跨浏览器Iframe postmessage-父子通信,javascript,html,cross-browser,postmessage,Javascript,Html,Cross Browser,Postmessage,我编写了一个内容脚本,将iframe注入任何网站(因此是不同的域) 我需要家长网站发送一些信息给孩子iframe,但我找不到一个方法来做到这一点 代码 var targetFrame = $('#myIframe')[0]; targetFrame.contentWindow.postMessage('the message', '*'); 不知怎的,它不起作用,我得到了一个无法调用未定义的错误的方法'postMessage'。 但是当我直接在Chrome的控制台上尝试相同的代码时,它成功了

我编写了一个内容脚本,将iframe注入任何网站(因此是不同的域)

我需要家长网站发送一些信息给孩子iframe,但我找不到一个方法来做到这一点

代码

var targetFrame = $('#myIframe')[0];
targetFrame.contentWindow.postMessage('the message', '*');
不知怎的,它不起作用,我得到了一个
无法调用未定义的
错误的方法'postMessage'。
但是当我直接在Chrome的控制台上尝试相同的代码时,它成功了


不过,我在将postMessage从孩子发送到家长时没有遇到任何问题,但我只需要家长向孩子iframe发送消息的方法。

我成功地使用了以下库:

它不需要任何flash/silverlight,只需要javascript。早在IE6就兼容了

它花了一点时间来启动和运行,但一旦启动,一切都很顺利

请记住,如果您在其他域上打开的iFrame使用不同的协议(HTTP与HTTPS),浏览器将发出警告,阻止您的脚本运行(除非用户表示他们愿意承担风险)。如果您可以访问这两个协议,那么最好将iFrame的内容同时托管在HTTP和HTTPS上,并相应地加载相应的脚本


祝你好运

您不需要以contentWindow为目标。试试这个:

var targetFrame = $('#myIframe')[0];
targetFrame.postMessage('the message', '*');

我最近写了一个
iframe
postMessage
代码,我遇到了一个非常类似的问题,它说
contentWindow
未定义的

在我的例子中,我的
iframe
还不是DOM树的一部分,它是由
document.createElement('iframe')
创建的一个变量

一旦我将其隐藏(宽度和高度0px,可见性隐藏)到页面主体中,
contentWindow
不再是未定义的,一切都按预期进行


当我在做我的项目时,我发现
postMessage
的页面非常有用。

这个库需要Flash,这在许多浏览器中不再受支持。@AndersonGreen它只对不支持postMessage的浏览器使用Flash,因为我们可以假设它们支持Flash,或者不管怎样都会失败。。。