检测Firefox添加内的选项卡URL更改

我有一个可在Chrome上运行的扩展程序,用于监视活动的选项卡以更改网址。

具体来说,我需要检测URL何时更改,但是没有新的页面加载或导航。 有些网站会这样做(例如,当您点击查看YouTube上的其他视频时)。

在Chrome上,我通过以下方式来完

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo && changeInfo.status == "complete") {
        //do stuff here
    }
});

如何检测Firefox插件中的这些更改?

我被告知要使用:听所有标签上的事件,但我不能把它放在一起。 其中一个问题是gBrowser没有在扩展中定义。

我究竟做错了什么?

有一种更简单的方法吗?


使用ProgressListener通知有关位置更改的信息。

要安装侦听器,请使用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);
});

不要忘记在扩展卸载时删除监听器。 Tab监听器被自动删除,但ProgressListeners不会。

受到转换为Chrome窗口的启发


如果您使用的是附加SDK,那么您正在查看错误的文档。 这里是标签文档。

如上所述,你创建一个监听器,如下所示:

var tabs = require("sdk/tabs");

// Listen for tab openings.
tabs.on('open', function onOpen(tab) {
  myOpenTabs.push(tab);
});

// Listen for tab content loads.
tabs.on('ready', function(tab) {
  console.log('tab is loaded', tab.title, tab.url);
});

您所看到的所有文档都应该是developer.mozilla.org/en-US/Add-ons/SDK的子集。


我发现他们之间的activatepageshow事件覆盖了URL中的所有变化,我可以在切换标签页,在新标签页中打开页面,关闭标签页,刷新页面以及输入新的URL之间进行变换。

var updateURL = function (tab) {
 var oldURL = url;
 var url = tab.url;
 console.log(url);
};

tabs.on("activate", updateURL);
tabs.on("pageshow", updateURL);
链接地址: http://www.djcxy.com/p/85373.html

上一篇: Detect tab URL change inside a Firefox add

下一篇: getColor(int id) deprecated on Android 6.0 Marshmallow (API 23)