postmessage用法_postmessage_postmessage是什么(2)

电脑杂谈  发布时间:2017-02-28 15:12:45  来源:网络整理

父页面使用postMessage的targetOrigin参数来限制哪个页面可以接收该消息;即使注入的脚本尝试改变这个父页面的<iframe>的位置,IE仍然只会将消息发送到位于的目标。

代码清单3-25中的代码给出了在这个父页面的<iframe>中托管的""文档。这个脚本将自己连接到onmessage事件处理程序,从而选择由父页面发出的消息;它在IE中使用attachEvent(),在其他浏览器中使用addEventListener()。当父页面上的脚本调用postMessage()时,这个页面上的onmessage事件被触发,执行receiveData()回调。每当接收到消息时,脚本就将来自该事件的数据写到屏幕上。

代码清单3-25 使用onmessage事件的子框架的代码示例

  1. <html> 
  2. <head> 
  3. <title>Cross Frame Messaging with postMessage (Receiver)</title> 
  4. </head> 
  5. <body> 
  6. <h3>Remote Page (.ie-examples.com)</h3> 
  7. Message Origin (e.origin): <span id="receivedDataOrigin"></span><br> 
  8. Message Contents (e.data): <span id="receivedDataContents"></span><br> 
  9. Message Type (e.type): <span id="receivedDataType"></span><br> 
  10. <script type="text/javascript"> 
  11. // Point the onmessage event callback to receiveData, either by  
  12. // using addEventListener or attachEvent  
  13. if(window.addEventListener)  
  14. window.addEventListener("message", receiveData, false);  
  15. else window.attachEvent("onmessage", receiveData);  
  16. // Grab messages from the parent through this callback/event e  
  17. function receiveData(e) {  
  18. // Make sure that the origin server is examples.proiedev.com  
  19. if (e.data != "" && e.origin == "http://examples.proiedev.com") {  
  20. // Write message data to the webpage  
  21. setText(document.getElementById("receivedDataOrigin"), e.origin);  
  22. setText(document.getElementById("receivedDataContents"), e.data);  
  23. setText(document.getElementById("receivedDataType"), e.type);  
  24. }  
  25. }  
  26. // Set element text (cross-browser innerText/textContent)  
  27. function setText(element, text) { /*...*/ }  
  28. </script> 
  29. </body> 
  30. </html> 

图3-18显示了在前面两个代码示例中描述的页面。位于examples.proiedev.com的父文档托管着<iframe>,它加载来自的页面。

当单击"Post Message" <input>时,父页面调用postMessage()方法向子框架调用发送一条消息(<input>框中的内容)。子框架从onmessage事件中接收消息通知,并立即向用户显示该消息。

注意:

IE不允许网页通过postMessage()与弹出窗口或选项卡通信,即使它们是由网页本身生成的也不可以;Firefox和其他浏览器要宽松一些。postmessage


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-35014-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...