2011-08-23 12 views
44

ユーザーがアイコンをクリックするたびにスクリプトが実行されますが、ポップアップが開かれないようにクローム拡張機能を作成するにはどうすればよいですか? (私はこの点を自分で調べていますが、何らかの理由で突然停止してしまいました。Chromeの拡張アイコンがクリックされるたびにスクリプトを実行

私はそれがマニフェストを正しく設定していると仮定しています。ここで私は今持っているものです。

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "description": "Does some simple stuff", 
    "browser_action": { 
    "popup" : "mine.html", 
    "default_icon": "logo.png" 
    }, 
    "permissions": [ 
    "notifications" 
    ] 
} 

答えて

57

は、マニフェストのごbrowser_actionセクションからポップアップを削除し、バックグラウンドスクリプト内browser Actionとともにbackground pagesを使用しています。

chrome.browserAction.onClicked.addListener(function(tab) { alert('icon clicked')}); 
+7

ここでは正確に言います。 mine.htmlがなければ、拡張モジュール内の唯一のファイルはマニフェスト...とアイコンです。 – Endophage

+2

バックグラウンドページ - http://code.google.com/chrome/extensions/background_pages.htmlをご覧ください。これは、長時間実行しているコードと異なるページに共通のコードを配置する場所です。上記のドキュメントへのリンクには、browserAction.onClickedの例があります。 – arunkumar

+0

ああ、それを得ました。最初は背景ページを試しましたが、browserAction.onClickedは認識しませんでした。 – Endophage

4

代わりのポップアップページを指定して、chrome.browserAction.onClicked APIを使用して、hereを文書化。

32

まず、ポップアップを表示したくない場合は、manifest.json(質問に表示されている)から"popup" : "mine.html"を削除してください。 manifest_versionが存在しなければならない、それは2でなければならないこと

{ 
    "name": "My Extension", 
    "version": "0.1", 
    "manifest_version" : 2, 
    "description": "Does some simple stuff", 
    "background" : { 
    "scripts" : ["background.js"] 
    }, 
    "browser_action": { 
    "default_icon": "logo .png" 
    }, 
    "permissions": ["activeTab"] 
} 
  • 注:

    あなたmanifest.jsonは次のようになります。

  • activeTabのアクセス許可が追加されていることに注意してください。
  • ブラウザアクションボタンがクリックされると、ポップアップを表示することも、スクリプトを実行することもできますが、両方を行うことはできません。

第二に、アイコンがクリックされたスクリプトを実行するために、あなたのbackground.jsファイルに以下のコードを配置します(ファイル名があなたのmanifest.jsonに指定されている):

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "testScript.js"}); 
}); 

最後に、testScript.jsはどこにすべきアイコンがクリックされたときに実行するコードを入力します。

+1

は正しく動作する唯一の方法です。ありがとう – myh34d

+3

2017年2月現在、このソリューションは元の質問で尋ねられた内容を正確に実行します。 – mjamore

+0

タブ情報を「testScript.js」に渡すにはどうすればよいですか? – kerzek

0

これはちょうど必要なものでしたが、これを追加する必要があります: ユーザーが拡張機能のアイコンをクリックしたときのようなワンタイムイベントが必要な場合は、バックグラウンドページは実行時にリソースが浪費されますすべての時間の背景。 代わりにイベントページを使用してください:

"background": { 
     "scripts": ["script.js"], 
     "persistent": false 
     } 
関連する問題