0

Google Chrome の拡張機能を開発しています。拡張機能のアイコンを作成しました。私がやりたいことは、次のとおりです。

  1. ユーザーが拡張機能のアイコンをクリックします。
  2. 新しいタブが開きます。
  3. コンテンツ スクリプトは、マニフェスト ファイルの設定に従って実行されますが、このタブでのみ実行されます。

明らかだと思いますが、たとえば、マニフェストファイルに次のプロパティを設定したとしましょう:

"content_scripts" : [
    {
        "matches" : ["http://stackoverflow.com"],
        "js" : ["script.js"]
    }
]

そして、2 つのタブがあるとします。最初のタブは手動で開き、2 つ目は拡張機能のアイコンをクリックして開きました。ここで、両方のタブで stackoverflow のインデックス ページを開きます。最初のタブでは何も起こりませんが、2 番目のタブでは "script.js" スクリプトが実行されます。どうすれば達成できますか?タブの ID チェックを実装できることはわかっていますが、それを実現する簡単な方法はありませんか?

4

1 に答える 1

2

content_scriptsこの場合、マニフェストのエントリを使用しないでください。呼び出しを使用chrome.tabs.executeScriptして、コンテンツ スクリプトを実行できます。作成したタブを追跡する必要がありますが、それは難しくありません。

バックグラウンド スクリプトで次のようなものを使用できます。

var createdTabs = {};

chrome.browserAction.onClicked.addListener(function() {
  chrome.tabs.create( {}, function( tab ) {
     createdTabs[tab.id] = true;
  }
}

chrome.tabs.onUpdate.addListener(function(tabId, changeInfo) {
  if( createdTabs[tabId] && changeInfo.url )
    chrome.tabs.executeScript( tabId, {file: 'script.js'} );
}
于 2013-09-18T16:27:08.373 に答える