39

访问给定 URL 时,如何在扩展程序中重定向 chrome?

例如:当我访问时,http://yahoo.com/我希望它重定向到http://google.com/

注意:此问题的前一个版本询问是否有任何 Google chrome 扩展程序在访问某个 URL 时自动重定向选项卡。因此,以下(目前的两个)答案解决了不同的问题。

4

3 回答 3

65

有很多选择,一个比另一个更复杂。

  1. webRequestAPI,特别是onBeforeRequest事件。(更好的是,即将推出的declarativeWebRequestAPI)。
  2. 内容脚本location.replace('http://example.com')在页面中注入。
  3. tabsAPI 。使用该onUpdated事件来检测页面何时更改其位置,并chrome.tabs.update更改其 URL。避免无限循环!

第一个是最好的,因为它在页面被请求之前就被激活了。第二个可以在请求完成后激活,但在页面呈现之前("run_at":"document_start")或呈现之后("run_at":"document_end")。为了完整起见,我提到了最后一个,但您不应该使用它,因为其他选项要好得多。

这是一个使用webRequestAPI 的示例,这是一个简单的扩展程序,它允许我浏览 Pirate bay 上的页面,即使主要主机已被我的 ISP 删除(实际的 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 回答
17

我知道我回答这个问题有点晚了我仍然想为未来的读者回答这个问题。看一下

Requestly - 用于修改网络请求的 Chrome 扩展程序。

目前,您可以设置规则

  1. 将请求 URL重定向到另一个 URL。
  2. 阻止一些请求。
  3. 用另一个字符串替换URL 中的某些部分
  4. 修改标头(添加/删除/修改请求和响应标头)

截图方便理解:

  • 规则列表

规则列表

  • 规则类型卡

规则类型卡

  • 新的重定向规则

创建重定向规则

  • 标头修改规则

修改标题

路线图中有很多东西需要包括在内,比如

  • 切换用户代理

..还有更多。

PS:我已经创建了这个所以如果你觉得这没有帮助你可以责怪我:)

于 2014-07-07T12:51:37.783 回答
-1

你可以使用我的扩展。转到“重写规则”选项卡,单击“+”按钮并添加新的重写规则。请注意,重写规则实际上是一个正则表达式,因此必须对 / 之类的字符进行转义

https://chrome.google.com/webstore/detail/dev-helper/kbbgddcndpjnadfacanamniaomcohlcc?hl=en

于 2020-09-14T17:49:43.677 回答