2

我正在考虑使用 tabid 来做到这一点,但是当我在 tab 中浏览时,它似乎经常发生变化。API 参考指出 tabid 在“浏览器会话”中是唯一的。我认为这意味着在浏览器进程的生命周期内,但现在似乎更有可能的是,只有在与特定网站的会话期间才能保证唯一性。有没有另一种方法可以唯一地识别一个标签的整个生命周期?

4

1 回答 1

1

由于预渲染和其他因素,标签可以“替换”。这意味着即使您保持选项卡打开,tabId 也可以更改。chrome.webNavigation.onTabReplaced可用于捕获此类事件。有关详细信息,请参阅https://developer.chrome.com/extensions/webNavigation.html#event-onTabReplaced

为了证明这一点,遵循以下步骤可能会有所帮助:

  1. 确保你已经为你的扩展请求了“tabs”和“webNavigation”请求,并且你的扩展没有使用非持久的背景页面(在 manifest.json 中没有 background.persistent = true)。还要确保 Google 是您的默认搜索引擎并启用即时搜索。
  2. 打开一些网站(不是谷歌搜索)。
  3. 在你的扩展后台页面的开发者工具中执行chrome.tabs.query({}, function(tabs){console.log(tabs)})。查看现有选项卡及其 ID。
  4. chrome.webNavigation.onTabReplaced.addListener(function(details){console.log(details);在 DevTools 中执行。
  5. 在该选项卡的多功能框中输入内容以触发 Google Instant 并单击页面正文。您应该会在 DevTools 的控制台中看到触发的 onTabReplaced 事件以及新旧选项卡 ID。
  6. 再次执行chrome.tabs.query({}, function(tabs){console.log(tabs)}),您会发现选项卡 id 实际上已“更改”。
于 2012-12-19T09:24:50.103 回答