是否可以使用Chrome扩展程序重写网址(带有额外参数)

use*_*895 10 google-chrome-extension

我试图将少量额外的参数附加到用户键入的URL(在页面加载之前).有可能吗?

例如,如果用户输入www.google.com,我想追?q=query加到url(最终:www.google.com?q=query.

谢谢

aps*_*ers 9

WebRequest的 API可能是你所需要的.此代码位于您的后台页面中:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if( details.url == "http://www.google.com/" )
            return {redirectUrl: "http://www.google.com/?q=defaultquery" };
    },
    {urls: ["http://www.google.com/*"]},
    ["blocking"]);
Run Code Online (Sandbox Code Playgroud)

这是一个重定向访问一个非常具体的规则http://www.google.com/http://www.google.com/?q=defaultquery,但我认为你可以看到如何将它扩大到包括更多的功能.

请注意,这将重新路由所有到达的尝试http://www.google.com/,包括Ajax请求和iframe.

根据文档,您需要为计划拦截的每个主机添加webRequestwebRequestBlocking权限以及主机权限:

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.google.com/",
    ...
],
Run Code Online (Sandbox Code Playgroud)


sac*_*024 6

这是一个老问题,我仍然为未来的读者回答。

修改查询参数有点棘手,因为您可能会陷入无限循环,而 Chrome/Firefox 可能会检测到它并处理请求 URL 的当前状态。

我在我的 chrome 扩展Requestly中遇到过这种情况,其中用户使用Replace Rule并替换www.google.comwww.google.com?q=query或执行类似的操作。

这种方法的问题是浏览器在添加查询参数后拦截请求 URL,因此该参数将被多次添加并损坏 URL。因此,您必须确保以下任一条件:-

  1. 一旦请求被重定向,请勿拦截该请求。
  2. 检查参数是否已经存在,然后不要重定向它。

正如 @apsillers 在他的回答中正确指出的那样,您必须使用 webRequest API 来对 URL 进行任何修改。请看一下他的答案 并相应地编写您的代码。

以防万一,您正在寻找现有的解决方案,请考虑尝试Requestly 的查询参数规则。这是它的外观的屏幕截图:-

在此输入图像描述

对于 Firefox,您可以从其主页下载 Requestly 。