Google Chrome拡張機能を開発しています。特定の操作を実行できるようにリダイレクトを検出する必要があります(操作は関係ありません。この質問はリダイレクトに関係します)。これまで私は私のbackground.jsでこのコードを持っている:しかし、どちらもconsole.log
またはsendMessage
メソッドが呼び出さなっているChrome APIのonBeforeRedirectが正しく機能していませんか?
chrome.webRequest.onBeforeRedirect.addListener(function (url, tabId) {
console.log("This is a redirect");
chrome.tabs.sendMessage(tabId, {"message": url}, function(response){});
}, {urls: ["<all_urls>"]});
。私はwikipedia.com、google.net、および他のいくつかのサイトに行き、ユーザーをリダイレクトすることを知っていました。拡張機能がこれをピックアップしないのはなぜですか?
(そして、はい、私は私のmanifest.jsonをファイルの下に私の権限で「WebRequestクラス」を入れている。)事前に
おかげで、あなたは他のコードが必要な場合は私に知らせてください。
編集:@zeのおかげで、現在動作していますが、現在は少し動いています。もです。言い換えれば、ページごとに複数回起動するようになり、リダイレクトサイトのURLをクロム検索バーに入力すると、リダイレクトメッセージも表示されます。私は実際にリダイレクトサイトに移動するために実際に入力を押すと(そしてまだ入力している間ではなく)一度起動するだけですか? details
:hereはコールバックは一つの引数を持つべきであると言いながらonBeforeRedirectは二つの引数を持っているために、私はあなたのコールバックを見ることができるものから、
chrome.webRequest.onBeforeRedirect.addListener(function (details) {
if(details.frameId === 0){
alert("This is a redirect.");
// chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){});
}
}, {urls: ["<all_urls>"]});
'console.log'が実行されない理由はすぐには分かりませんが、ハンドラの署名が間違っています - そのイベントは単一の' details'オブジェクトを返します。あなたは正しいコンソールを探していますか? 'tabs.sendMessage'は、タイミングが与えられても無意味です(タブはコンテンツスクリプトをアンロードしようとしているか、まだ新しいスクリプトをロードしていません)。 – Xan
マニフェストファイルでホストのアクセス許可を宣言しましたか? –
^これが答えになるかもしれません。 '' webRequest ''だけでなく、あなたがキャプチャしたURLに対するホスト権限が必要です。 – Xan