【问题标题】:Redirecting URL in a chrome extension在 chrome 扩展中重定向 URL
【发布时间】:2012-08-17 09:34:16
【问题描述】:

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

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

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

【问题讨论】:

  • 我想我会分享这个与此类似的用例:我经常右键单击并复制项目文件并粘贴到浏览器位置以打开脚本。结果类似于/var/www/path/to/project/script.php,然后我必须在按Enter 之前将其更改为localhost/path/to/project/script.php。我厌倦了这一点,决定写一个扩展来代替我。

标签: google-chrome google-chrome-extension


【解决方案1】:

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

  1. webRequest API,特别是onBeforeRequest event。 (更好的是,即将推出的declarativeWebRequest API)。
  2. Content scripts。在页面中注入location.replace('http://example.com')
  3. tabs API。使用onUpdated event 检测页面何时更改其位置,使用chrome.tabs.update 更改其URL。不过要避免无限循环!

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

这是一个使用 webRequest API 的示例,这是一个简单的扩展,它允许我浏览 Pirate bay 上的页面,即使主要主机已被我的 ISP 删除(实际的 URL 列表要长得多,但我为了示例而省略了它们)。
有关 URL 格式的说明,请参阅 match patterns

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"]
);

【讨论】:

  • 这可行,但是当我尝试更改主机 url 并重新加载扩展时,它不会选择新的 url...即使删除扩展并将其重新添加也无济于事。我必须将扩展程序移动到不同的文件夹并重新安装... :((
  • @DavidKrmpotic 您是否将主机的权限添加到清单文件中?
  • 不明白你的意思...主机(它将重定向到的网址)不必在清单中...看起来像重新加载扩展的错误。当我重命名文件夹并再次安装扩展时,一切都适用于新代码。
  • @DavidKrmpotic 向 manifest.json 文件添加新权限后,您必须通过 chrome://extensions/ 的“重新加载”链接重新加载扩展。
  • @Rob W 我知道,我只是困惑了一小会儿,为什么演示不起作用并想警告未来的人。就个人而言,我已经将其修改为一个简单的 facebook 重定向。
【解决方案2】:

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

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

目前,您可以设置规则

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

截图便于理解:

  • 规则列表

  • 规则类型卡片

  • 新的重定向规则

  • 标题修改规则

路线图中有很多东西需要像请求一样覆盖

  • 切换用户代理

.. 还有更多。

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

【讨论】:

  • (我建议您从 Chrome 扩展页面链接到 GitHub,即从右侧的概述描述:chrome.google.com/webstore/detail/requestly/… 到 GitHub。我认为这给人留下了很好的印象。)跨度>
  • 这也解决了将 youtube 上的 https 重定向回 http 的问题,以便我们可以通过我们的 iPrism 代理服务器使用它。 (这可能是我在这方面找到的最佳解决方案。)
  • @sachinjain024 这个扩展很酷,不知道代码是不是开源的?
  • -1 这个问题显然是面向编程的,即它是关于如何在自己的 Web 扩展中实现重定向,而不是关于使用什么扩展。 (否则我肯定会在 superuser.com 上提出这个问题。)
  • @balu 实际上,如果您查看问题历史记录,它开始时是“是否有扩展名”,现在当然不再是那样了
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2021-03-02
    • 1970-01-01
    • 2020-08-25
    • 2014-11-04
    • 2014-03-06
    相关资源
    最近更新 更多