Javascript HTML5-跨浏览器Iframe postmessage-父子通信
我编写了一个内容脚本,将iframe注入任何网站(因此是不同的域) 我需要家长网站发送一些信息给孩子iframe,但我找不到一个方法来做到这一点 代码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的控制台上尝试相同的代码时,它成功了
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,或者不管怎样都会失败。。。