[英]How to differentiate between Firefox tabs?
我目前正在开发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”将被您的扩展名所独有的东西(例如其名称)代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.