我有这样的脚本
- function resizeCrossDomainIframe(id,other_domain) {
- var iframe = document.getElementById(id);
- window.addEventListener('message',function (event) {
- if (event.origin !== other_domain) return; // only accept messages from the specified domain
- if (event.data === "reload") top.location.reload(); // If child page sends reload request - reload it without any questions asked
- if (isNaN(event.data)) { //If this isn't integer than it is alert
- alert(event.data); // Show alert if not integer
- } else {
- var height = parseInt(event.data) + 5; // add some extra height to avoid scrollbar
- iframe.height = height + "px";
- alert(event.data);
- }
- },false);
- }
它的作用是动态调整iframe大小.现在在第一个iframe页面上,我只需要一个提醒,但在iframe页面中,我有链接,当我进入第二页时,我看到2个警报,当我去第三页 – 我得到3个警报,第4个链接触发4个警报等…
- <body class="settingspage" onload="parent.postMessage(document.body.scrollHeight,'<?PHP echo $_SESSION['SESS_ACCESSING_FROM']; ?>');">
我尝试清除“事件”数组,但我仍然收到警报,但这次它们是空的,但是警报数量等于iframe中的链接点击次数?
为什么是这样 ?
解决方法
问题是,每次单击iframe中的链接时,会触发加载事件.
所以你每次点击链接时绑定你的消息事件.
第一次一切都是正确的,因为你绑定一次,第二次你收到两个警报,因为你绑定了两次,等等…
所以解决方案是删除卸载iframe的’message’事件.
因此,您必须清理代码:
- var listener = function (event) {
- if (event.data === "reload") top.location.reload(); // If child page sends reload request - reload it without any questions asked
- if (isNaN(event.data)) { //If this isn't integer than it is alert
- alert(event.data); // Show alert if not integer
- } else {
- var height = parseInt(event.data) + 5; // add some extra height to avoid scrollbar
- iframe.height = height + "px";
- alert(event.data);
- }
- };
- function iframeOnLoad(id) {
- var iframe = document.getElementById(id);
- window.addEventListener('message',listener,false);
- }
- function iframeOnUnload(id) {
- var iframe = document.getElementById(id);
- window.removeEventListener('message',false);
- }