我编写了以下脚本来更改Chrome中标签的网址,但无法弄清楚如何让它自动在每个网页上运行。
var nytimes = /.*nytimes\.com.*/;
var patt = /(&gwh=).*$/;
function updateUrl(tab){
if(tab.url.match(nytimes))
{
var newUrl = tab.url.replace(patt,"");
chrome.tabs.update(tab.id, {url: newurl});
}
}
chrome.tabs.onUpdated.addListener(function(tab) {updateUrl(tab);});
我将它放入我的后台页面,但它无效。我是否需要将代码放在其他地方才能运行?
答案 0 :(得分:1)
我强烈建议您阅读content scripts。它们正是您所需要的,但您需要了解他们对Chrome。* API的访问权限有限,因此您必须使用message passing才能使用当前功能。但是,通过使用内容脚本,您可以使用我提出的解决方案之一来简化这一过程。
假设您希望每次都将重定向发送到同一个网址,您可以轻松配置您的扩展程序,以便仅在纽约时报网站上运行您的内容脚本。例如;
content.js
location = 'http://example.com';
但是,如果重定向网址可能有所不同,那么很多人希望将该逻辑抽象到您的background page。例如;
content.js
// Or you can pass a more specific section of the URL (e.g. `location.pathname`)
chrome.extension.sendRequest({href: location.href}, function(data) {
location = data.url;
});
background.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
sendResponse({
url: getUrl(request.href) // TODO: `getUrl` method containing your logic...
});
});
无论您采用哪种方法,您还需要获得在manifest file目标网站上运行内容脚本的权限。
manifest.json
{
...
"content_scripts": [
{
"js": ["content.js"],
"matches": ["*://*.nytimes.com/*"],
"run_at": "document_start"
}
],
...
}