停止监听postMessage消息事件

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);

有没有解决这个问题的方法?
1个回答

21

我认为要移除监听器,你需要有一个指向相同函数的引用,像这样:

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

所以你的代码无法运行是因为它没有将该函数作为监听器引用。


1
是的,太多 jQuery 我忘记了,谢谢。但在这种情况下,除事件对象之外,我如何传递参数给我的回调函数? - silkAdmin
我不相信你能做到,你只需要在之后获取值。 - ars265
这可能对你有所帮助,但我仍然认为向函数传递参数并不完全可行。https://dev59.com/YnVC5IYBdhLWcg3wjx1d - ars265

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接