2012-10-26 128 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