2

tabid を使用してこれを行うことを考えていましたが、タブ内をブラウジングしていると、頻繁に変更されるようです。API リファレンスには、tabid が「ブラウザ セッション」内で一意であることが記載されています。私はこれをブラウザ プロセスの存続期間内に意味すると考えましたが、特定の Web サイトとのセッション中にのみ一意性が保証される可能性が高くなりました。タブ全体を一意に識別する別の方法はありますか?

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. いくつかの Web サイトを開きます (Google 検索ではありません)。
  3. chrome.tabs.query({}, function(tabs){console.log(tabs)})拡張機能のバックグラウンド ページの開発者ツールで実行します。既存のタブとその ID を見てください。
  4. chrome.webNavigation.onTabReplaced.addListener(function(details){console.log(details);DevTools で実行します。
  5. そのタブのオムニボックスに何かを入力して Google インスタント検索をトリガーし、ページの本文をクリックします。onTabReplaced イベントが発生し、DevTools のコンソールに古いタブ ID と新しいタブ ID が表示されます。
  6. もう一度実行chrome.tabs.query({}, function(tabs){console.log(tabs)})すると、そのタブ ID が実際に「変更」されていることがわかります。
于 2012-12-19T09:24:50.103 に答える