javascript - html5 messaging multiple instance -
javascript - html5 messaging multiple instance -
i have script this
function resizecrossdomainiframe(id, other_domain) { var iframe = document.getelementbyid(id); window.addeventlistener('message', function (event) { if (event.origin !== other_domain) return; // take messages specified domain if (event.data === "reload") top.location.reload(); // if kid page sends reload request - reload without questions asked if (isnan(event.data)) { //if isn't integer alert alert(event.data); // show alert if not integer } else { var height = parseint(event.data) + 5; // add together height avoid scrollbar iframe.height = height + "px"; alert(event.data); } }, false); }
what dynamically resizes iframe. on first iframe page 1 alert, in within iframe page have links , when go sec page see 2 alerts, when go 3rd page - 3 alerts, 4th link trigger 4 alerts etc...
in each iframed page calling parent resize like:
<body class="settingspage" onload="parent.postmessage(document.body.scrollheight, '<?php echo $_session['sess_accessing_from']; ?>');">
i tried clear "event" array, still alerts, time empty, number of alerts equals number of link-clicks within iframe ?
why ?
the problem is, every time click on link in iframe, load event fired.
so bind message event every time link clicked. on first time correct, because binded once, on sec time 2 alerts, because bound twice, , on...
so solution remove 'message'event on unload of iframe.
for reason have clean code bit:
var listener = function (event) { if (event.data === "reload") top.location.reload(); // if kid page sends reload request - reload without questions asked if (isnan(event.data)) { //if isn't integer alert alert(event.data); // show alert if not integer } else { var height = parseint(event.data) + 5; // add together height avoid scrollbar iframe.height = height + "px"; alert(event.data); } };
then have functions phone call onload , onunload.
function iframeonload(id) { var iframe = document.getelementbyid(id); window.addeventlistener('message', listener, false); } function iframeonunload(id) { var iframe = document.getelementbyid(id); window.removeeventlistener('message', listener, false); }
javascript html5 iframe
Comments
Post a Comment