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

时间:2012-04-21 06:50:02

标签: google-chrome-extension

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

例如,如果用户输入www.google.com,我想将?q=query附加到网址(final:www.google.com?q=query

由于

2 个答案:

答案 0 :(得分:8)

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

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

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

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

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.google.com/",
    ...
],

答案 1 :(得分:1)

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

查询参数的修改有点棘手,因为你可以在无限循环中结束,chrome / firefox可以检测它并处理任何当前的请求Url状态。

我在Chrome扩展程序Requestly中遇到过这种情况,其中用户使用了Replace Rule并将www.google.com替换为www.google.com?q=query或做了类似的事情。

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

  1. 重定向后请勿拦截请求。
  2. 检查参数是否已存在,不要重定向。
  3. 正如@apsillers在他的回答中正确指出的那样,你必须使用webRequest API来对URL进行任何修改。请看看他的answer 并相应地编写代码。

    以防万一,您正在寻找已有的解决方案,请考虑尝试Requestly's Query Parameter Rule。以下是截图: -

    enter image description here

    对于Firefox,您可以下载Requestly from its home page.