繁体   English   中英

如何区分Firefox标签?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM