CustomEvent()到XUL选项卡-Firefox插件

CustomEvent() to an XUL tab - Firefox addon

本文关键字:-Firefox 插件 选项 XUL CustomEvent      更新时间:2023-09-26

由于许多原因,我不得不在选项卡中打开XUL,而不是使用标准窗口。我希望将自定义事件发送到此选项卡,下面是我的代码的样子:

myextension.js:

  .. 
  var pTab = window.gBrowser.loadOneTab("chrome://myextension/path/options.xul", 
                  {inBackground: false});
  var pWin = window; 
  var event = new pWin.CustomEvent("prefwindow-event");
  pWin.dispatchEvent(event);
  ..

options.xul代码:

 window.addEventListener("load", init, false); 
 window.addEventListener("prefwindow-event", myevent, false, true);
 .. 
 myevent: function(e) {
      dump("My event : " + e.details ); 
 },
 ..

然而,我不了解这个事件。我已经尝试了所有可能的选择。启用/禁用addEventListener((的useCapturewantsUntrusted。在意识到在窗口之间发送自定义事件有限制后,我还尝试使用tab元素调度事件,如下所示:

pTab.dispatchEvent(event);

那也不行。1( 如果我使用对话框窗口而不是选项卡(openDialog而不是loadOneTab(,那么事件调度将非常正常。2( tab元素仅继承dispatchEvent,而不是CustomEvent

所以问题是,有没有一种方法可以发送自定义事件并在选项卡中接收?

var event = new pTab.linkedBrowser._contentWindow.CustomEvent("prefwindow-event");

编辑:

概念验证,打开草稿栏,将环境切换到浏览器,运行以下代码段

var url = 'data:text/html;charset=utf-8,';
var content = '<html><script>addEventListener("Hello",function(){alert("Hello")},false)</script></html>'
var tab  = gBrowser.loadOneTab(url+encodeURIComponent(content), {inBackground: false});
tab.addEventListener("load", function(){
  var evt = new tab.linkedBrowser.contentWindow.CustomEvent("Hello");
  tab.linkedBrowser.contentWindow.dispatchEvent(evt);
}, false);