我需要在我的Firefox扩展使用。 我已经尝试过window.onload事件侦听器,并检查当前的URL ==旧的URL,这是一个好主意,但它不工作时,页面加载PDF。

我看到哈希过更改的功能,但它仅与Firefox 3.6工程;我需要它与Firefox 3至少工作。

所以,我需要一个事件监听器如果document.location改变该检查。

有帮助吗?

解决方案

例如,可以使用:

var mainWindow = window
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIWebNavigation)
    .QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIDOMWindow);

mainWindow.getBrowser().addEventListener("DOMContentLoaded",
                        your_function, false);

不过,问题是,你需要将监听器添加到浏览器,而不是窗口。

修改结果 请参见 https://developer.mozilla.org/En/Code_snippets/Tabbed_browser 的信息上访问来自不同的上下文中的浏览器,以及其他一些有用的信息。

修改结果 只是以添加更多的细节....

function your_function(event) {
    if (event.originalTarget instanceof HTMLDocument) {
    var doc = event.originalTarget;
        // if it's just a frame element, then return and wait for the
        // main event to fire.
        if (event.originalTarget.defaultView.frameElement)
             return;

        // now you can use doc.location however you want
    }
}

请注意,这将在页面响应任何标签打开,而不是特定标签。


有关特定的标签,你可以使用这样的:

var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.addTab("http://www.google.com/"));
newTabBrowser.addEventListener("load", function () {
    newTabBrowser.contentDocument.body.innerHTML = "<div>hello world</div>";
}, true);

上面增加了一个新的标签,然后添加的监听器。然而,对于所有选项卡,你需要像下面这样。然后添加“DOMContentLoaded”事件监听每个选项卡上添加时(和关闭时删除)。

您可能还希望看到: https://developer.mozilla.org/恩/ Code_snippets / Tabbed_browser#Notification_when_a_tab_is_added_or_removed HTTPS://developer.mozilla。组织/恩/ Code_snippets / Tabbed_browser#Getting_document_of_currently_selected_tab

(对于保存)

function exampleTabAdded(event) {
  var browser = gBrowser.getBrowserForTab(event.target);
  // browser is the XUL element of the browser that's been added
}

function exampleTabMoved(event) {
  var browser = gBrowser.getBrowserForTab(event.target);
  // browser is the XUL element of the browser that's been moved
}

function exampleTabRemoved(event) {
  var browser = gBrowser.getBrowserForTab(event.target);
  // browser is the XUL element of the browser that's been removed
}

// During initialisation
var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", exampleTabAdded, false);
container.addEventListener("TabMove", exampleTabMoved, false);
container.addEventListener("TabClose", exampleTabRemoved, false);

// When no longer needed
container.removeEventListener("TabOpen", exampleTabAdded, false);
container.removeEventListener("TabMove", exampleTabMoved, false);
container.removeEventListener("TabClose", exampleTabRemoved, false);

这应该让你的存在方式99%。

其他提示

添加进展监听和监视标签内的位置的变化。盖片与swithches附加组件SDK。

要安装一个监听器,使用viewFor转换SDK标签到其原始(旧)表示。 向后转换是可能与modelFor和getTabForContentWindow。

const tabs = require("sdk/tabs");
const {viewFor} = require('sdk/view/core');
const {modelFor} = require('sdk/model/core');
const {getBrowserForTab, getTabForContentWindow} = require("sdk/tabs/utils");
const {Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);

var progressListener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
    onLocationChange: function(aProgress, aRequest, aURI) {
        var highLevel= modelFor(getTabForContentWindow(aProgress.DOMWindow));
        console.log("onLocationChange ", highLevel.url);
    }
};

tabs.on('open', function(newTab) {
    var lowLevel = viewFor(newTab);
    var browser = getBrowserForTab(lowLevel);
    browser.addProgressListener(progressListener);
});

通过启发 转换为镶边的窗口

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top