javascript – html5消息传递多个实例

前端之家收集整理的这篇文章主要介绍了javascript – html5消息传递多个实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这样的脚本
  1. function resizeCrossDomainIframe(id,other_domain) {
  2. var iframe = document.getElementById(id);
  3. window.addEventListener('message',function (event) {
  4. if (event.origin !== other_domain) return; // only accept messages from the specified domain
  5. if (event.data === "reload") top.location.reload(); // If child page sends reload request - reload it without any questions asked
  6. if (isNaN(event.data)) { //If this isn't integer than it is alert
  7. alert(event.data); // Show alert if not integer
  8. } else {
  9. var height = parseInt(event.data) + 5; // add some extra height to avoid scrollbar
  10. iframe.height = height + "px";
  11. alert(event.data);
  12. }
  13. },false);
  14. }

它的作用是动态调整iframe大小.现在在第一个iframe页面上,我只需要一个提醒,但在iframe页面中,我有链接,当我进入第二页时,我看到2个警报,当我去第三页 – 我得到3个警报,第4个链接触发4个警报等…

在每个iframed页面中,我调用parent来调整大小:

  1. <body class="settingspage" onload="parent.postMessage(document.body.scrollHeight,'<?PHP echo $_SESSION['SESS_ACCESSING_FROM']; ?>');">

我尝试清除“事件”数组,但我仍然收到警报,但这次它们是空的,但是警报数量等于iframe中的链接点击次数

为什么是这样 ?

解决方法

问题是,每次单击iframe中的链接时,会触发加载事件.

所以你每次点击链接时绑定你的消息事件.
第一次一切都是正确的,因为你绑定一次,第二次你收到两个警报,因为你绑定了两次,等等…

所以解决方案是删除卸载iframe的’message’事件.

因此,您必须清理代码

  1. var listener = function (event) {
  2.  
  3. if (event.data === "reload") top.location.reload(); // If child page sends reload request - reload it without any questions asked
  4. if (isNaN(event.data)) { //If this isn't integer than it is alert
  5. alert(event.data); // Show alert if not integer
  6. } else {
  7. var height = parseInt(event.data) + 5; // add some extra height to avoid scrollbar
  8. iframe.height = height + "px";
  9. alert(event.data);
  10. }
  11. };

那么你有你的功能,你调用onLoad和onUnload.

  1. function iframeOnLoad(id) {
  2. var iframe = document.getElementById(id);
  3. window.addEventListener('message',listener,false);
  4. }
  5.  
  6. function iframeOnUnload(id) {
  7. var iframe = document.getElementById(id);
  8. window.removeEventListener('message',false);
  9. }

猜你在找的JavaScript相关文章