我正在考虑使用 tabid 来做到这一点,但是当我在 tab 中浏览时,它似乎经常发生变化。API 参考指出 tabid 在“浏览器会话”中是唯一的。我认为这意味着在浏览器进程的生命周期内,但现在似乎更有可能的是,只有在与特定网站的会话期间才能保证唯一性。有没有另一种方法可以唯一地识别一个标签的整个生命周期?
问问题
1328 次
1 回答
1
由于预渲染和其他因素,标签可以“替换”。这意味着即使您保持选项卡打开,tabId 也可以更改。chrome.webNavigation.onTabReplaced
可用于捕获此类事件。有关详细信息,请参阅https://developer.chrome.com/extensions/webNavigation.html#event-onTabReplaced。
为了证明这一点,遵循以下步骤可能会有所帮助:
- 确保你已经为你的扩展请求了“tabs”和“webNavigation”请求,并且你的扩展没有使用非持久的背景页面(在 manifest.json 中没有 background.persistent = true)。还要确保 Google 是您的默认搜索引擎并启用即时搜索。
- 打开一些网站(不是谷歌搜索)。
- 在你的扩展后台页面的开发者工具中执行
chrome.tabs.query({}, function(tabs){console.log(tabs)})
。查看现有选项卡及其 ID。 chrome.webNavigation.onTabReplaced.addListener(function(details){console.log(details);
在 DevTools 中执行。- 在该选项卡的多功能框中输入内容以触发 Google Instant 并单击页面正文。您应该会在 DevTools 的控制台中看到触发的 onTabReplaced 事件以及新旧选项卡 ID。
- 再次执行
chrome.tabs.query({}, function(tabs){console.log(tabs)})
,您会发现选项卡 id 实际上已“更改”。
于 2012-12-19T09:24:50.103 回答