在Firefox XUL中,如何获取弹出窗口的“文档”对象?

时间:2014-07-11 11:54:19

标签: javascript firefox-addon xul

点击主浏览器窗口上的链接后,会出现另一个弹出浏览器窗口。我需要检测弹出浏览器窗口并获取其文档对象。我的审判是:

wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
     .getService(Components.interfaces.nsIWindowMediator);
var recentWindow = wm.getMostRecentWindow("navigator:browser");
if (recentWindow) {
    var tabBrowser = recentWindow.getBrowser();
    alert(tabBrowser.contentDocument.body.innerHTML);
}

但我没有得到任何东西。

1 个答案:

答案 0 :(得分:0)

我想也许窗户还没有打开。并且也不需要使用getBrowser()只需执行recentWindow.gBrowser.contentDocument || recentWindow.document使用窗口侦听器,您就可以捕获所有打开的窗口。

所以这是窗口监听器的东西:

Cu.import('resource://gre/modules/Services.jsm');
var windowListener = {
    onOpenWindow: function (aXULWindow) {
        // Wait for the window to finish loading
        let aDOMWindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
        aDOMWindow.addEventListener("load", function () {
            aDOMWindow.removeEventListener("load", arguments.callee, false);
            var document = aDOMWindow.gBrowser.contentDocument || aDOMWindow.document;
            aDOMWindow.alert(document.body.innerHTML || 'doc has no body element');
            Services.wm.removeListener(windowListener);
        }, false);
    },
    onCloseWindow: function (aXULWindow) {},
    onWindowTitleChange: function (aXULWindow, aNewTitle) {}
};

然后在您点击链接之前执行此操作:Services.wm.addListener(windowListener);