gpt4 book ai didi

javascript - 如何区分 Firefox 标签页?

转载 作者:行者123 更新时间:2023-11-28 21:20:53 25 4
gpt4 key购买 nike

我目前正在开发一个 Firefox 扩展,我需要能够区分每个打开的选项卡。

这个想法是能够将传出的 HTTP 请求与其源选项卡关联起来。例如,对于观察到的每个“on-modify-request”事件,我知道它来自选项卡 #2 或选项卡 #3。

这必须足以区分同一网站的多个实例。例如,如果我打开了三个“www.google.com”选项卡,则枚举所有打开的选项卡将不起作用。

据我所知,Mozilla 中的 tabbrowser 对象没有任何唯一标识符或属性。

有什么想法吗?

最佳答案

http-on-modify-request为您提供实际的请求对象。从那里您需要获取关联的窗口,方法是 nsILoadContext这里。我使用这段代码:

function getRequestWindow(request)
{
try
{
if (request.notificationCallbacks)
return request.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
} catch(e) {}

try
{
if (request.loadGroup && request.loadGroup.notificationCallbacks)
return request.loadGroup.notificationCallbacks
.getInterface(Components.interfaces.nsILoadContext)
.associatedWindow;
} catch(e) {}

return null;
}

这是一个内容窗口(甚至可能是一个框架)。所以你必须找到相应的选项卡 - 使用 gBrowser.getBrowserForDocument() 。像这样:

var wnd = getRequestWindow(request);
var browser = (wnd ? gBrowser.getBrowserForDocument(wnd.top.document) : null);

现在你有<browser>请求所属的元素 - 如果有的话。因为请求也可能来自 Firefox UI 或其他浏览器窗口。您可以在该元素上设置自己的 Expando 属性来获取选项卡标识符(选择唯一的名称以避免与其他扩展发生冲突)。像这样的事情:

if (!("_myExtensionTabId" in browser))
browser._myExtensionTabId = ++maxTabId;
var tabId = browser._myExtensionTabId;

这里maxTabId将是一个初始为零的全局变量。理想情况下,“myExtension”应替换为您的扩展程序特有的内容(例如其名称)。

关于javascript - 如何区分 Firefox 标签页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com