0

ChromeでタブのURLを変更するために次のスクリプトを作成しましたが、すべてのページでタブを自動的に実行する方法がわかりません。

  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);});

それをバックグラウンドページに入れましたが、機能していません。コードを実行するには、コードを別の場所に配置する必要がありますか?

4

1 に答える 1

1

コンテンツスクリプトについて読むことを強くお勧めします。これらはまさにあなたが探しているものですが、Chrome。* APIへのアクセスが制限されていることを理解する必要があるため、現在の機能を使用するにはメッセージパッシングを使用する必要があります。ただし、コンテンツスクリプトを使用することで、提案されているソリューションの1つを使用してこれを簡単にすることができます。

解決策1

毎回同じURLにリダイレクトを送信する場合は、NYTimesサイトでのみコンテンツスクリプトを実行するように拡張機能を簡単に構成できます。例えば;

コンテンツスクリプト:content.js

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

解決策2

ただし、リダイレクトURLが異なる可能性がある場合は、そのロジックをバックグラウンドページに抽象化する必要があります。例えば;

コンテンツスクリプト: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.json

{
  ...
  "content_scripts": [
    {
      "js": ["content.js"],
      "matches": ["*://*.nytimes.com/*"],
      "run_at": "document_start"
    }
  ],
  ...
}
于 2012-06-14T08:07:59.497 に答える