Javascript 将CustomEvent()分派到prefwindow-Firefox加载项

Javascript 将CustomEvent()分派到prefwindow-Firefox加载项,javascript,dom,firefox-addon,dom-events,xul,Javascript,Dom,Firefox Addon,Dom Events,Xul,使用Firefox插件,我希望发送一个到 我使用打开首选项窗口,并保留对已打开窗口的引用。之后,我尝试发送事件,但从未收到该事件 var pWin = window.openDialg("chrome://myextension/path/options.xul", "name", features); var event = new pWin.CustomEvent("prefwindow-event"); pWin.dispatchEvent(event); 在prefwindow范围

使用Firefox插件,我希望发送一个到

我使用打开首选项窗口,并保留对已打开窗口的引用。之后,我尝试发送事件,但从未收到该事件

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); 
然而,我从未收到过那个事件。CustomEvent()的文档说明

创建CustomEvent对象时,必须从 和你要射击的窗户一样


那么这是否意味着,我永远无法将事件从我的主扩展范围分派到另一个窗口的扩展范围?如果这确实是可能的,我在这里做错了什么?如果没有,还有其他选择吗?

我想以下方法可以奏效

var pWin=window.openDialg(“chrome://myextension/path/options.xul“,”名称“,特征);
addEventListener(“加载”,函数(){
var事件=新的pWin.CustomEvent(“预窗口事件”);
pWin.调度事件(event);
},假);

Paa的代码应该有效

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

谢谢,但这似乎也不起作用。如果我将事件侦听器放在相同的代码作用域中,它会工作,但不在prefwindow中。此外,根据MDN的说法,
createEvent
不推荐使用,应该使用CustomEvent。哦,我不知道
createEvent
不推荐使用。但现在我几乎可以肯定我找到了问题所在。检查修改后的答案。这看起来是一个有趣的黑客行为,但不幸的是,我仍然没有收到该事件。我认为这就是MDN中所解释的“当创建CustomEvent对象时,您必须从您要攻击的同一窗口创建对象。”。另一件事,如果我要从负载处理程序内部进行事件分派,这将破坏事件的目的。因为我打算将几个事件发送到一个已经加载的窗口,而不仅仅是在加载时。这就是paa的代码所做的,他正在使窗口创建并将事件发送到自己。这一定是你如何添加事件侦听器的问题。伙计们,谢谢你们的所有输入!是的,那确实有效+1.但在我的插件中有一个非标准的“扭曲”,它会在一个选项卡中打开“首选项”窗口。选项卡与普通窗口一样,支持事件侦听器和分派事件。但是
CustomEvent
似乎不是继承的,而且我没有得到该事件。不管怎样,我都会想出一种传递数据的方法。我将把这个标记为已回答。再次感谢!对多谢各位+1.请看我的评论以获得答案。