如何在Chrome中生成标签ID?

时间:2012-06-14 21:28:01

标签: javascript google-chrome google-chrome-extension

他们是逐步创建的吗?基本上它们是整数,但我想知道它们是否以特定方式生成。知道这对我正在编写的应用程序有用。

编辑:我需要在内存中保存ID,我在想是否可以命令他们进行搜索。如果它们的编号越来越多,很容易将搜索作为二分搜索实现,这就是我要问的原因

2 个答案:

答案 0 :(得分:3)

我在与ID相关的文档中找到的唯一内容是以下摘录:

  

id(整数)   选项卡的ID。标签ID在浏览器会话中是唯一的。

因此,我们可以从中收集到的是,在同一会话中,没有两个选项卡可以获得相同的ID。文档中没有关于它们如何生成的信息。

最终,我认为任何在这种意义上具有预测性的方法都注定要犯错误。失败,你应该建立一个响应式应用程序而不是预测性应用程序。

而不是假设将使用ID#12打开下一个选项卡,捕获选项卡的创建,然后您将知道ID并可以基于此执行操作。

您需要的是tab onCreated event。创建标签后,您将获得tab Object,您可以从中获取tabidwindowid并执行您想要的任何操作。

由于你没有告诉我们你的最终目标,我不能给你任何具体的例子/代码来帮助你,除了指出你正确的方向。


继续发表评论:

如果您只是想通过ID查找标签,那么将标签元数据存储在字典而不是列表中会不会更容易?

var metadataRepository = {};
metadataRepository[tab.id] = tab.metadata;

然后:

var metadata = metadataRepository[tabId];
if (metadata) {
   // Do Stuff
}

更多信息:

从我目前的Chrome(19.xxx ...)开始,V8引擎支持Array.filter(...)

的JavaScript 1.6方法

我做了一个小测试here,模拟使用过滤器搜索数组并进行类型检查&字符串搜索每次迭代(常见的事情)。

在我的机器上花了25毫秒(相对较新,i7-2600k)爆破10,000个条目。虽然与编译语言相比,这并不快,但在处理100个标签时,它将是亚毫秒。我不认为你需要过多担心性能。

如果您的应用经常查找,请考虑使用本地缓存或上述字典。

答案 1 :(得分:0)

要跟踪所有标签并解决问题,请在扩展程序上下文中创建一个数组。

window.CurrentTabs = {};

然后,只需连接删除和添加,以便跟踪所有活动标签。

chrome.tabs.onCreated.addListener(function(tab) { window.CurrentTabs[tab.id]=tab  });
chrome.tabs.onRemoved.addListener(function(tabID){ delete window.CurrentTabs[tabID]; });

有人提到:

  1. 您的扩展程序启动时,您还需要运行一次chrome.tabs.query(...),因为在扩展程序的激活点之前,哪些选项卡可能存在多种原因

  2. 你还需要研究其他场景,比如拖动窗口的标签和那种东西(我不知道发生了什么,但是有事件处理程序)

  3. 标签ID,是的,是增量的,但它们并非“完美”增量。您可以致电chrome.tabs.create(),最后在51范围内找不到有效标签5852-57That's Chrome behavior

  4. 搜索功能,只需使用此

    即可
    chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })