39

特定の URL にアクセスするときに拡張機能でクロムをリダイレクトするにはどうすればよいですか?

例:訪問したときにhttp://yahoo.com/リダイレクトしたいhttp://google.com/

注:この質問の以前のバージョンでは、特定の URL にアクセスしたときにタブを自動的にリダイレクトする Google chrome 拡張機能があるかどうかを尋ねました。したがって、以下の (現在 2 つの) 回答は、さまざまな質問に対応しています。

4

3 に答える 3

65

多くの選択肢があり、一方は他方よりも複雑です。

  1. webRequestAPI、具体的にはonBeforeRequestevent。(さらに良いことに、今後のdeclarativeWebRequestAPI )。
  2. コンテンツ スクリプト。ページに挿入location.replace('http://example.com')します。
  3. tabsAPI 。onUpdatedこのイベントを使用して、ページの場所が変更されたことを検出し、chrome.tabs.updateURL を変更します。ただし、無限ループは避けてください。

ページが要求される前にアクティブ化されるため、最初のものが最適です。2 番目のものは、要求が満たされた後、ページがレンダリングされる前 ( "run_at":"document_start") またはレンダリングされた後( ) にアクティブ化できます"run_at":"document_end"。完全を期すために最後のオプションについて言及しましたが、他のオプションの方がはるかに優れているため、使用しないでください。

これは、API を使用した例webRequestです。これは、主要なホストが ISP によって停止された場合でも、Pirate bay のページを閲覧できるようにする単純な拡張機能です (URL の実際のリストははるかに長くなりますが、念のため省略しました)。例の)。URL 形式の説明については、一致パターン
を 参照してください。

manifest.json

{
  "name": "The Pirate Bay",
  "description": "Redirect The Pirate Bay to a different host",
  "version": "1.0",
  "manifest_version": 2,
  "background": {"scripts":["background.js"]},
  "permissions": [
    "webRequest",
    "*://thepiratebay.se/*",
    "*://www.thepiratebay.se/*",
    "webRequestBlocking"
  ]
}

background.js

var host = "http://tpb.pirateparty.org.uk";
chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
         return {redirectUrl: host + details.url.match(/^https?:\/\/[^\/]+([\S\s]*)/)[1]};
    },
    {
        urls: [
            "*://piratebay.se/*",
            "*://www.piratebay.se/*"
        ],
        types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
    },
    ["blocking"]
);
于 2012-08-22T10:08:43.023 に答える