この質問は以前にも同様の方法で尋ねられましたが、私の特定の問題を解決する答えはありません。API の特定の部分が廃止されたかどうかはわかりませんが、次のようになります。
マニフェストでタブのアクセス許可を持つ background.js を使用して、現在のタブのページ URL を検出する最も効果的な方法は何ですか? 以下を使用してタブの URL を取得できることを理解しています。
chrome.tabs.getSelected(null, function(tab) {
var url = tab.url;
});
もちろん、上記のメソッドは特定のイベントによってトリガーされる必要があります。タブが変更されたとき、および新しいページが現在のタブに完全に読み込まれたときに、これをトリガーする必要があります。
私はそれを 1 時間ほどいじっていて、関数を実行する 2 つのリスナーを持つというアイデアを思いつきました。しかし、onUpdated リスナーには、複数回呼び出されるという奇妙な癖があります。
chrome.tabs.onActivated.addListener(function() {
// This works perfect.
chrome.tabs.getSelected(null, function(tab) {
console.debug("Tab is: " + tab.url);
});
});
chrome.tabs.onUpdated.addListener(function() {
// This somehow runs multiple times depending on the page.
chrome.tabs.getSelected(null, function(tab) {
console.debug("Tab changed to: " + tab.url);
});
});
重複を無視することでおそらくこれをハッキングできることはわかっていますが、これを行うより効果的な方法は確かにありますか? onUpdated リスナーを使用する場合、出力されるのは同じ URL であることに言及したいと思いました。
コンソールに渡す代わりに、URL を関数に渡します。この関数は、2 つの承認済みドメインの有効なバリエーションと一致するかどうかを確認します。URL のパスとパラメーターについてさらに検証を実行しますが、これは私の質問ではありません。
また、有効なページ上にあるかどうかに応じてアイコンの色が変わるため、承認済みの URL でなくなったことを検出する必要もあります。
ありがとう!