私は現在、iframe を開き、前後の postMessage の通信を設定するブックマークレットに取り組んでいます。それはすべてうまくいきます。ただし、ブックマークレットが匿名関数として読み込まれているためと思われるため、ページでブックマークレットを複数回実行すると、リスナーが増加します。
これらの addEventListeners を追跡して二重にならないようにする方法はありますか?
無名関数の外で rp_receive_message を定義する必要がありますか?
コードの例を次に示します。
var rp_receive_message = function (e) {
var response = e.data;
console.log("got message with "+ response);
};
if (window.addEventListener) {
window.addEventListener('message', rp_receive_message, false);
} else {
window.attachEvent('onmessage', rp_receive_message);
}
var s1 = window.document.createElement('iframe');
s1.setAttribute('src', 'http://mydomain.com/iframe.html');
s1.setAttribute('id', 'testiframe');
s1.setAttribute('width', '700');
s1.setAttribute('height', '550');
s1.setAttribute('frameBorder', '0');
s1.setAttribute('onload', 'this.contentWindow.postMessage(window.location.href, "http://mydomain.com/iframe.html");');
document.getElementById('container').appendChild(s1);