猿问

跨域IFRAME问题

跨域IFRAME问题

比如说,我有一个名为example.com的站点,其中嵌入了iframe.net域的iframe,现在我想读取iframe的内容,并传递一些参数来显示文本消息。就像用户名一样。

现在的问题是,这个问题无法在两者之间建立联系,甚至无法获得我使用的iframe的innerHTML(我使用了以下方法)。

document.getElementById('myframe').contentWindow.document.body.innerHTML;

它引发“拒绝访问属性的权限”错误。

有人知道如何在跨域平台上读写吗?


慕村225694
浏览 807回答 3
3回答

弑天下

如果您无法控制框架站点,则无法规避跨域策略。如果您对这两个站点都有控制权,则可以使用postMessage方法在不同的域中传输数据。一个非常基本的例子://&nbsp;framed.htm:window.onmessage&nbsp;=&nbsp;function(event)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;event.source.postMessage(document.body.innerHTML,&nbsp;event.origin);};//&nbsp;Main&nbsp;page:window.onmessage&nbsp;=&nbsp;function(event)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;alert(event.data);};//&nbsp;Trigger://&nbsp;<iframe&nbsp;id="myframe"&nbsp;src="framed.htm"></iframe>document.getElementById('myframe'). &nbsp;&nbsp;&nbsp;&nbsp;contentWindow.postMessage('','*');

梵蒂冈之花

在……里面Internet Explorer 8,作为参数传递的事件可能为零,这就是为什么您需要以不同的方式访问事件:在……里面framework.html:window.onmessage&nbsp;=&nbsp;function(event)&nbsp;{ &nbsp;&nbsp;&nbsp;var&nbsp;evt&nbsp;=&nbsp;event&nbsp;||&nbsp;window.event; &nbsp;&nbsp;&nbsp;evt.source.postMessage('Message&nbsp;from&nbsp;iFrame',&nbsp;evt.origin);};在……上面main.html:window.onmessage&nbsp;=&nbsp;function(event)&nbsp;{ &nbsp;&nbsp;&nbsp;var&nbsp;evt&nbsp;=&nbsp;event&nbsp;||&nbsp;window.event; &nbsp;&nbsp;&nbsp;alert(evt.data);};该事件的触发方式与Rob W提供的方式相同:document.getElementById('frameId').contentWindow.postMessage('message','*');
随时随地看视频慕课网APP
我要回答