2014-03-19 68 views
0

使用firefox插件,我想發送一個<a href="https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent" rel="nofollow">CustomEvent()</a>到<a href="https://developer.mozilla.org/en-US/docs/XUL/prefwindow" rel="nofollow">preference window</a> prefwindow - Firefox插件

我打開首選窗口使用openDialog(),並保持對打開的窗口的引用。之後,我嘗試派發事件,但事件從未收到。

var pWin = window.openDialg("chrome://myextension/path/options.xul", "name", features); 
var event = new pWin.CustomEvent("prefwindow-event"); 
pWin.dispatchEvent(event); 

在prefwindow範圍,我有這樣的代碼在XUL附加的腳本:

window.addEventListener("prefwindow-event", this.catchEvent, false); 

但是,我從來沒有收到該事件。對於自定義事件()文檔說

在創建自定義事件對象,必須從 同一窗口中你要火逆創建對象。

那麼這是否意味着,我永遠不會派發一個事件從我的主擴展範圍到另一個窗口的事件?如果這確實可行,那麼我在這裏做錯了什麼?如果沒有,是否有其他選擇?

回答

1

我想下面的工作

var pWin = window.openDialg("chrome://myextension/path/options.xul", "name", features); 
pWin.addEventListener("load", function(){ 
    var event = new pWin.CustomEvent("prefwindow-event"); 
    pWin.dispatchEvent(event); 
}, false); 
+0

謝謝,但似乎沒有任何工作。如果我把我的事件監聽器放在它工作的同一代碼範圍內,但不在prefwindow內。此外,根據MDN'createEvent'已棄用,並應使用CustomEvent代替。 – user3337744

+0

哦,我不知道'createEvent'已被棄用。但現在我幾乎可以肯定我發現了這個問題。檢查修改後的答案。 – paa

+0

這看起來像一個有趣的黑客,但不幸的是我仍然沒有收到事件。我認爲這是在MDN「 中解釋的內容在創建CustomEvent對象時,您必須從相同的窗口中創建對象,以便與之對抗。」 另一件事,如果我要從負載處理程序中執行事件分派,那將會破壞事件的目的。因爲我打算髮送幾個事件到一個已經加載的窗口,而不僅僅是在加載時。 – user3337744

1

棘的代碼應工作。

var pWin = window.openDialg("chrome://myextension/path/options.xul", "name", features); 
pWin.addEventListener("prefwindow-event", function(){pWin.alert('prefwindow-event fired')}, false); 
pWin.addEventListener("load", function(){ 
    var event = new pWin.CustomEvent("prefwindow-event"); 
    pWin.dispatchEvent(event); 
}, false); 

如果不是那就試試這個:

var pWin = window.openDialg("chrome://myextension/path/options.xul", "name", features); 
pWin.addEventListener("load", function(){ 
    pWin.addEventListener("prefwindow-event", function(){pWin.alert('prefwindow-event fired')}, false); 
    var event = new pWin.CustomEvent("prefwindow-event"); 
    pWin.dispatchEvent(event); 
}, false); 
+0

是的。謝謝。 +1。請參閱我的評論以獲得答案。 – user3337744

相關問題