14

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

例如,如果用户键入www.google.com,我想附加?q=query到 url (final: www.google.com?q=query.

谢谢

4

2 回答 2

13

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/with http://www.google.com/?q=defaultquery,但我认为您可以看到如何扩展它以包含更多功能。

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

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

"permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*.google.com/",
    ...
],
于 2012-04-21T14:47:11.537 回答
2

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

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

我在我的 chrome 扩展Requestly中遇到过这种情况,用户使用Replace Rule和替换www.google.comwww.google.com?q=query做了类似的事情。

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

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

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

以防万一,您正在寻找一个已经可用的解决方案,请考虑尝试Requestly 的 Query Parameter Rule。这是它的外观截图:-

在此处输入图像描述

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

于 2018-01-15T05:23:39.713 回答