2017-01-24 3 views
0

私の最初の拡張機能として、chrome.webRequest APIを使用して、ウェブページをリロードしています。利用できない場合、ウェブサーバーは要求を別のものにリダイレクトしますURL。リダイレクトが見つかった場合(onBeforeRedirectイベントが発生した場合)、私の内線番号は元のリクエスト(tabs.reload)を試し続けます。chrome.tabs.reload()でアクティブなタブ以外のタブをリロードする

すべてがうまくいきますが、複数のタブで実行することはできません。拡張機能は1つのタブを作成して再ロードすることができますが、拡張アイコンをクリックして別のタブを開くか、他の非アクティブなタブをクリックするとbackground.jsが停止します。

複数のタブ(たとえば5つのタブなど)を停止せずに実行するには、どうすれば変更できますか?

chrome.browserAction.onClicked.addListener(function(activeTab) { 
    var newURL = "https://myurl"; 
    chrome.tabs.create({ url: newURL }); 
}); 

chrome.webRequest.onBeforeRedirect.addListener(function (details) { 
    console.log("Redirect -> Reload"); 
    chrome.tabs.reload(); 
}, { 
    urls: ["http://*/*", "https://*/*"] 
}, ["responseHeaders"]); 

chrome.webRequest.onResponseStarted.addListener(function (details) { 
    console.log("Response Started"); 
    console.log(details.url); 
    console.log(details.statusLine); 
    if (details.url === "https://myurl" && details.statusCode === 200) { 
     console.log("Finally"); 
    } 
}, { 
    urls: ["http://*/*", "https://*/*"] 
}, ["responseHeaders"]); 

manifest.jsonを:私はあなたのコードをテストしていないものの

{ 
    "name": "My Tool", 
    "description": "My Tool", 
    "version": "1", 
    "manifest_version": 2, 

    "browser_action": { 
    "default_icon": "icon.png" 
    }, 
    "background": { 
    "scripts": ["background.js"] 
}, 
    "permissions":[ 
    "https://myurl", 
    "http://redirectedurl", 
    "webRequest", 
    "webRequestBlocking", 
    "tabs" 
    ] 
} 
+0

URLがリダイレクトされたとき?サーバーからの応答がリダイレクトからページの提供に変わるのは非常にまれです。 – Makyen

+0

拡張機能で*特定の*タブやリダイレクトされたURL(リプライが利用できるようになるまで特定のURLにキャンプするなど)をリロードする必要がある理由を確認できます。ただし、その場合は、タブごと、またはURL単位でのみ有効にし、すべてのタブでは有効にしないでください。すべてのタブで無差別に実行すると、通常のウェブサーフィンが中断される可能性があります。また、特定のURLとローカルマシンで使用しているリソースを強く叩くことを制限するために、リロードの間にいくらかの遅延を実装することもできます。 – Makyen

+0

はい、これは、拡張機能にタブを再読み込みさせたいという厳しい理由です。私は十分に私の質問を記述しないかもしれません。私の質問に_specific_ tab、_particulart_ URLを含めることができませんでした。 – piptan

答えて

1

、一つの理由、それは他の何にも動作しません

はここbackground.jsです現在のウィンドウのアクティブなタブよりも、chrome.tabs.reload()に引数を渡さないことです。引き数なしでは、どのタブが実際にchrome.webRequest.onBeforeRedirectイベントをトリガーしたかにかかわらず、現在のウィンドウ内のアクティブなタブを再ロードすることに失敗します。実際webRequest.onBeforeRedirectイベントがリロードされるトリガータブを持っているために、あなたはchrome.tabs.reload()にタブIDで引数を渡す必要があります、何かのように:なぜあなたは、タブを再ロードするためにあなたの延長を希望している

chrome.tabs.reload(details.tabId); 
+0

解決策を探している間にこのコードを何度も見たことがありますが、そのような場合はわかりませんでした。私の拡張機能にこれを追加すると、魅力的なように機能します。ありがとう。 – piptan

関連する問題