他们是逐步创建的吗?基本上它们是整数,但我想知道它们是否以特定方式生成。知道这对我正在编写的应用程序有用。
编辑:我需要在内存中保存ID,我在想是否可以命令他们进行搜索。如果它们的编号越来越多,很容易将搜索作为二分搜索实现,这就是我要问的原因答案 0 :(得分:3)
我在与ID相关的文档中找到的唯一内容是以下摘录:
id(整数) 选项卡的ID。标签ID在浏览器会话中是唯一的。
因此,我们可以从中收集到的是,在同一会话中,没有两个选项卡可以获得相同的ID。文档中没有关于它们如何生成的信息。
最终,我认为任何在这种意义上具有预测性的方法都注定要犯错误。失败,你应该建立一个响应式应用程序而不是预测性应用程序。
而不是假设将使用ID#12打开下一个选项卡,捕获选项卡的创建,然后您将知道ID并可以基于此执行操作。
您需要的是tab onCreated event
。创建标签后,您将获得tab
Object,您可以从中获取tabid
和windowid
并执行您想要的任何操作。
由于你没有告诉我们你的最终目标,我不能给你任何具体的例子/代码来帮助你,除了指出你正确的方向。
继续发表评论:
如果您只是想通过ID查找标签,那么将标签元数据存储在字典而不是列表中会不会更容易?
var metadataRepository = {};
metadataRepository[tab.id] = tab.metadata;
然后:
var metadata = metadataRepository[tabId];
if (metadata) {
// Do Stuff
}
更多信息:
从我目前的Chrome(19.xxx ...)开始,V8引擎支持Array.filter(...)
我做了一个小测试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]; });
有人提到:
您的扩展程序启动时,您还需要运行一次chrome.tabs.query(...)
,因为在扩展程序的激活点之前,哪些选项卡可能存在多种原因
你还需要研究其他场景,比如拖动窗口的标签和那种东西(我不知道发生了什么,但是有事件处理程序)
标签ID,是的,是增量的,但它们并非“完美”增量。您可以致电chrome.tabs.create()
,最后在51
范围内找不到有效标签58
和52-57
。 That's Chrome behavior
搜索功能,只需使用此
即可chrome.tabs.query({ /* EMPTY SEARCH PARAMETERS */ }, function(tabs){ /* DO WHAT YOU WANT HERE */ })