有没有办法在标签的生命周期中唯一标识标签?

时间:2012-12-19 08:51:30

标签: google-chrome google-chrome-extension

我正在考虑使用tabid来执行此操作,但是当我在选项卡中浏览时,它似乎经常发生变化。 API reference注意到tabid在“浏览器会话”中是唯一的。我认为这意味着在浏览器进程的生命周期内,但现在似乎更有可能只在与特定网站的会话期间保证唯一性。还有另一种方法可以在其整个生命中唯一地识别标签吗?

1 个答案:

答案 0 :(得分: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. 在DevTools中执行chrome.webNavigation.onTabReplaced.addListener(function(details){console.log(details);
  5. 在该标签的多功能框中输入内容以触发Google Instant,然后点击页面正文。您应该在DevTools的控制台中看到onTabReplaced事件被触发以及新旧选项卡ID。
  6. 再次执行chrome.tabs.query({}, function(tabs){console.log(tabs)}),您会发现标签ID实际上已“更改”。