我正在尝试将少量额外参数附加到用户键入的URL(在页面加载之前)。有可能吗?
例如,如果用户输入www.google.com
,我想将?q=query
附加到网址(final:www.google.com?q=query
。
由于
答案 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。
根据文档,您需要为您计划拦截的每个主机添加webRequest
和webRequestBlocking
权限以及主机权限:
"permissions": [
"webRequest",
"webRequestBlocking",
"*://*.google.com/",
...
],
答案 1 :(得分:1)
这是一个古老的问题,我仍在为未来的读者回答。
查询参数的修改有点棘手,因为你可以在无限循环中结束,chrome / firefox可以检测它并处理任何当前的请求Url状态。
我在Chrome扩展程序Requestly中遇到过这种情况,其中用户使用了Replace Rule
并将www.google.com
替换为www.google.com?q=query
或做了类似的事情。
这种方法的问题是浏览器可能在添加查询参数后拦截请求url,因此参数将被多次添加并破坏url。因此,您必须确保以下任一项: -
正如@apsillers在他的回答中正确指出的那样,你必须使用webRequest API来对URL进行任何修改。请看看他的answer 并相应地编写代码。
以防万一,您正在寻找已有的解决方案,请考虑尝试Requestly's Query Parameter Rule。以下是截图: -
对于Firefox,您可以下载Requestly from its home page.