1

我正在尝试为 Firefox Electrolysis 编写附加组件。当我打开 e10s 窗口并右键单击页面元素时,document.popupNode 不适用于 e10s 窗口。

var WindowListener = {
    setupBrowserUI: function(window) {
        //
    },
    tearDownBrowserUI: function(window) {
    },
    // nsIWindowMediatorListener functions
    onOpenWindow: function(xulWindow) {
        var domWindow = xulWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                                 .getInterface(Components.interfaces.nsIDOMWindow);
        // Wait for it to finish loading
        domWindow.addEventListener("load", function listener() {
            domWindow.removeEventListener("load", listener, false);
            // If this is a browser window then setup its UI      
            if (domWindow.document.documentElement.getAttribute("windowtype")=="navigator:browser") {

                domWindow.document.getElementById('contentAreaContextMenu').addEventListener("popupshowing", function(event){

                    let document=event.currentTarget.ownerDocument;
                    let prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
                    prompts.alert(null, "Test", document.popupNode);                    

                }, false);

            }

        }, false);
    },
    onCloseWindow: function(xulWindow) {
    },
    onWindowTitleChange: function(xulWindow, newTitle) {
    }
};

let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
       getService(Components.interfaces.nsIWindowMediator);
// Wait for any new browser windows to open
wm.addListener(WindowListener);

您可以在 Scratchpad 中使用测试代码。运行测试代码后,打开一个新的普通 Firefox 窗口并在网页内单击鼠标右键。document.popupNode 出现提示警报。

但是如果打开一个新的 e10s Firefox 窗口并单击鼠标右键,它不会显示任何内容。

如何在 e10s 窗口中获取 document.popupNode?

4

1 回答 1

1

没有document.popupNode,因为 XUL 文档没有在节点上弹出任何内容。相反,它从子进程收到一条消息,告诉它在某些屏幕坐标处显示菜单。

相反,使用gContextMenu.target,它是从 填充的gContextMenuContentData.event.target

gContextMenu.target适用于所有浏览器窗口,而gContextMenuContentData.event.target仅适用于 e10s 窗口。

当然,gContextMenu只有在弹出窗口即将显示或显示时才有效。

于 2014-07-25T12:48:19.033 回答