gpt4 book ai didi

firefox - 检测 Firefox 附加组件中的标签 URL 更改

转载 作者:行者123 更新时间:2023-12-04 08:34:09 25 4
gpt4 key购买 nike

我有一个在 Chrome 上运行的扩展程序,它可以监视事件选项卡的 URL 更改。

具体来说,我需要检测 URL 何时发生变化,但没有新的页面加载或导航。某些网站会这样做(例如,当您单击以查看 YouTube 上的另一个视频时)。

在 Chrome 上,我通过以下方式完成了这项工作:

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

如何检测 Firefox 附加组件中的此类更改?

我被告知使用: Listening to events on all tabs ,但我不能把它放在一起。问题之一是 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 不会。

灵感来自
Converting to chrome windows

关于firefox - 检测 Firefox 附加组件中的标签 URL 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464941/

25 4 0