我打開首選窗口使用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);
但是,我從來沒有收到該事件。對於自定義事件()文檔說
在創建自定義事件對象,必須從 同一窗口中你要火逆創建對象。
那麼這是否意味着,我永遠不會派發一個事件從我的主擴展範圍到另一個窗口的事件?如果這確實可行,那麼我在這裏做錯了什麼?如果沒有,是否有其他選擇?
謝謝,但似乎沒有任何工作。如果我把我的事件監聽器放在它工作的同一代碼範圍內,但不在prefwindow內。此外,根據MDN'createEvent'已棄用,並應使用CustomEvent代替。 – user3337744
哦,我不知道'createEvent'已被棄用。但現在我幾乎可以肯定我發現了這個問題。檢查修改後的答案。 – paa
這看起來像一個有趣的黑客,但不幸的是我仍然沒有收到事件。我認爲這是在MDN「 中解釋的內容在創建CustomEvent對象時,您必須從相同的窗口中創建對象,以便與之對抗。」 另一件事,如果我要從負載處理程序中執行事件分派,那將會破壞事件的目的。因爲我打算髮送幾個事件到一個已經加載的窗口,而不僅僅是在加載時。 – user3337744