0

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をクロム検索バーに入力すると、リダイレクトメッセージも表示されます。私は実際にリダイレクトサイトに移動するために実際に入力を押すと(そしてまだ入力している間ではなく)一度起動するだけですか? detailshereはコールバックは一つの引数を持つべきであると言いながら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>"]}); 
+1

'console.log'が実行されない理由はすぐには分かりませんが、ハンドラの署名が間違っています - そのイベントは単一の' details'オブジェクトを返します。あなたは正しいコンソールを探していますか? 'tabs.sendMessage'は、タイミングが与えられても無意味です(タブはコンテンツスクリプトをアンロードしようとしているか、まだ新しいスクリプトをロードしていません)。 – Xan

+1

マニフェストファイルでホストのアクセス許可を宣言しましたか? –

+0

^これが答えになるかもしれません。 '' webRequest ''だけでなく、あなたがキャプチャしたURLに対するホスト権限が必要です。 – Xan

答えて

2

:ここに新しいコードです。その後、details.url(または新しいURLが必要な場合はdetails.redirectUrl)とdetails.tabIdを使用してurlとtabIdにアクセスします。 また、タブ内のフレームもリダイレクトされるため、イベントは複数回発生する可能性があります。コードは、メインフレームは、あなたのようなチェックを追加する必要がありますリダイレクトした場合にのみ実行する必要がある場合:また

if (details.frameId == 0){ 
     //Your code here 
} 

あなたがaddListener関数の引数で{urls: ["<all_urls>"]}を持っている理由、私はわかりません。唯一の引数はコールバックです。これが出て働いていた場合、私に教えてください

chrome.webRequest.onBeforeRedirect.addListener(function (details) { 
    if(details.frameId == 0){   
    console.log("This is a redirect"); 
    chrome.tabs.sendMessage(details.tabId, {"message": details.url}, function(response){}); 
    } 
}); 

: だから、私は次のように書きます。

+0

これはまだ動作していません。コンソールを開いて「ログを保存」オプションをオンにしましたが、wikipedia.comまたはgoogle.netにアクセスすると、標準の「wikipedia.org/に移動しました」または「google.comにナビゲート」メッセージが表示されます。 –

+0

気にしない、編集してください。 –

+0

多分あなたは別のイベントを試してみるべきです。たぶん 'chrome.webRequest.onCompleted()'のようなものでしょう。 –

関連する問題