它们是增量创建的吗?基本上它们是整数,但我想知道它们是否以特定方式生成。知道这对我正在编写的应用程序很有用。
编辑:我需要记住这些 ID,我正在考虑是否可以命令它们进行搜索。如果它们的创建数量越来越多,那么很容易将搜索实现为二进制搜索,这就是我要问的原因
它们是增量创建的吗?基本上它们是整数,但我想知道它们是否以特定方式生成。知道这对我正在编写的应用程序很有用。
编辑:我需要记住这些 ID,我正在考虑是否可以命令它们进行搜索。如果它们的创建数量越来越多,那么很容易将搜索实现为二进制搜索,这就是我要问的原因
我可以在与 ID 相关的文档中找到的唯一内容是以下摘录:
id ( 整数 ) 选项卡的 ID。标签 ID 在浏览器会话中是唯一的。
所以我们可以从中收集到的是,没有两个选项卡会在同一个会话中获得相同的 ID。文档中没有关于它们是如何生成的信息。
最终,我认为任何在这种意义上具有预测性的方法都注定会出现错误和失败,您应该构建响应式应用程序而不是预测性应用程序。
不要假设下一个选项卡将使用 ID #12 打开,而是捕获选项卡的创建,然后您将知道 ID 并可以基于该 ID 执行操作。
你需要的是tab onCreated event
. 创建选项卡后,您将获得一个tab
对象,您可以从中获取tabid
并windowid
执行您想要的任何操作。
由于您没有告诉我们太多有关您的最终目标的信息,因此除了为您指明正确的方向之外,我无法为您提供任何具体的示例/代码来帮助您。
评论继续:
如果您只是想通过 ID 查找选项卡,将选项卡元数据存储在字典而不是列表中不是更容易吗?
var metadataRepository = {};
metadataRepository[tab.id] = tab.metadata;
然后:
var metadata = metadataRepository[tabId];
if (metadata) {
// Do Stuff
}
更多信息:
从我目前的 Chrome (19.xxx...) 开始,V8 引擎支持 JavaScript 1.6 方法Array.filter(...)
我在这里做了一个小测试,模拟使用过滤器搜索数组并在每次迭代时进行类型检查和字符串搜索(常见的东西)。
在我的机器(相对较新的 i7-2600k)上花了 25 毫秒来爆破 10,000 个条目。虽然这与编译语言相比并不快,但在处理 100 个选项卡时它会是亚毫秒级。我认为您无需过多担心性能。
如果您的应用程序经常查找此内容,请考虑使用本地缓存或上面提到的字典。
要跟踪所有选项卡并解决您的问题,请在扩展上下文中创建一个数组。
window.CurrentTabs = {};
然后,只需连接删除和添加,以便跟踪所有活动选项卡。
chrome.tabs.onCreated.addListener(function(tab) { window.CurrentTabs[tab.id]=tab });
chrome.tabs.onRemoved.addListener(function(tabID){ delete window.CurrentTabs[tabID]; });
一些提及:
您还需要在扩展程序启动时运行一次chrome.tabs.query(...)
,因为在扩展程序激活点之前存在选项卡的原因有很多
您还需要研究其他场景,例如跨窗口拖动选项卡之类的东西(我不知道到底发生了什么,但有事件处理程序)
是的,选项卡 ID 是增量的,但它们不是“完全”增量的。您可能会调用chrome.tabs.create()
并最终获得选项卡 ID 51
,并且58
该范围内没有有效的选项卡52-57
。那是 Chrome 的行为。
对于您的搜索功能,只需使用它
chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })