由于许多原因,我必须在选项卡中打开XUL,而不是使用标准窗口。我希望将custom events发送到此标签,以及我的代码如何显示:
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()的useCapture
和wantsUntrusted
。在意识到在窗口之间发送自定义事件存在限制之后,我还尝试使用tab元素调度事件,如下所示:
pTab.dispatchEvent(event);
那也不会奏效。 1)如果我使用对话框窗口而不是标签(openDialog
而不是loadOneTab
),事件发送将起作用perfectly fine。 2)标签元素only inherits dispatchEvent
而不是CustomEvent
所以问题是,有没有办法发送自定义事件并在标签中收到它?
答案 0 :(得分:0)
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);