页面加载后更改chrome中的URL

时间:2012-06-12 15:04:08

标签: google-chrome-extension

我编写了以下脚本来更改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);});

我将它放入我的后台页面,但它无效。我是否需要将代码放在其他地方才能运行?

1 个答案:

答案 0 :(得分:1)

我强烈建议您阅读content scripts。它们正是您所需要的,但您需要了解他们对Chrome。* API的访问权限有限,因此您必须使用message passing才能使用当前功能。但是,通过使用内容脚本,您可以使用我提出的解决方案之一来简化这一过程。

解决方案1 ​​

假设您希望每次都将重定向发送到同一个网址,您可以轻松配置您的扩展程序,以便仅在纽约时报网站上运行您的内容脚本。例如;

内容脚本:content.js

location = 'http://example.com';

解决方案2

但是,如果重定向网址可能有所不同,那么很多人希望将该逻辑抽象到您的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"
    }
  ],
  ...
}