PostMessage读取Iframe内容

时间:2016-07-06 16:00:27

标签: javascript jquery iframe cross-domain

我有要求我需要获取iframe的内容,其中src是下面的另一个域是我的代码

<iframe id="receiver" src="http://demos.mattwest.io/post-message/receiver.html" width="500" height="200">
  <p>Your browser does not support iframes.</p>
</iframe>



<script>
setTimeout(function(){ 
console.log($('#receiver').contents().find('body'));
 }, 2000); 

我收到了以下错误

jquery-2.2.4.js:3079 Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "null" from accessing a frame with origin "http://demos.mattwest.io".  The frame requesting access has a protocol of "file", the frame being accessed has a protocol of "http". Protocols must match.

我搜索了很多关于PostMessage http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

的信息

他们在这里发送消息,我的目标是获取iframe内容如何在我的sceneario中实现postMessage。

我无法创建小提琴,它显示了其他一些问题https://jsfiddle.net/alokranjan39/re6aja0c/

如何解决这个请帮忙!!!

1 个答案:

答案 0 :(得分:2)

iframe 上的

postMessage无法在本地运行。您需要在服务器上运行此代码或以http而非file开头的测试网站。

否则避免使用jQuery ,因为它使用.contents()内的postMessage()方法与iframe进行通信。

纯粹的javascript方式:

使用.contentDocument

var iframer = document.getElementById('reciever');

var iframeBody = iframer.contentDocument.body;

用例:

iframer.contentDocument.getElementById('someElementInIframe')

等...

希望这有帮助