2012-10-26 132 views
4

我似乎无法删除接收者事件侦听器。鉴于下面的代码,控制台将继续无休止地打印“hi”。停止收听postMessage消息事件

接收

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

有没有办法解决?

回答

9

我相信,以消除听众,你必须有相同的功能的引用,因此这样的:

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

所以,你的不工作的原因是因为它不具有参考作为听众的功能。

+0

是啊太多jquery我忘记了这一点,谢谢..虽然在那种情况下,我怎么可以传递参数到我的回调,除了事件对象? – silkAdmin

+0

我不相信你可以,你只需要获得价值观。 – ars265

+0

这可能会以某种方式帮助你,但我仍然认为完全不可能添加参数传递给函数。 http://stackoverflow.com/questions/256754/how-to-pass-arguments-to-addeventlistener-listener-function – ars265