7

レシーバーイベントリスナーを削除できないようです。以下のコードを指定すると、コンソールは「hi」を際限なく出力し続けます。

レシーバー:

window.addEventListener("message", function(e){
       console.log('hi');
       window.removeEventListener("message", function(e){}, false)
}, false);

送信者:

var emiter = setInterval(function(){
            console.log('sending message');
            window.parent.postMessage( messageData, "*" );
        }, 1000);

これを回避する方法はありますか?

4

1 に答える 1

18

リスナーを削除するには、次のように同じ関数への参照が必要だと思います。

var f = function(e){
  console.log('hi');
  window.removeEventListener("message", f, false);
}
window.addEventListener("message", f);

あなたのが機能しない理由は、リスナーとしてその関数への参照がないためです。

于 2012-10-26T20:19:06.503 に答える