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