web-dev-qa-db-ja.com

毎回スクリプトを実行Chrome拡張機能アイコンをクリック

ユーザーがアイコンをクリックするたびにスクリプトが実行されるが、ポップアップが開かないようにchrome拡張機能を書くにはどうすればよいですか?私はこの時点で、突然動作を停止し、すべてのページを404しました。

マニフェストを正しく設定しているだけだと思います。私が今持っているものは次のとおりです。

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

マニフェストのbrowser_actionセクションからポップアップを削除し、バックグラウンドスクリプトで 背景ページブラウザアクション を使用します。

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

まず、ポップアップを表示したくない場合は、"popup" : "mine.html"あなたのmanifest.json(質問に表示)。

きみの manifest.jsonは次のようになります。

{
  "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_versionはそこになければならず、2
  • activeTabパーミッションが追加されていることに注意してください。
  • ブラウザーのアクションボタンがクリックされたときにできることは1つだけであることに注意してください。ポップアップを表示するか、スクリプトを実行できますが、両方を行うことはできません。

次に、アイコンがクリックされたときにスクリプトを実行するには、以下のコードをbackground.jsファイル(ファイル名はmanifest.json):

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

最後に、 testScript.jsは、アイコンをクリックしたときに実行するコードを配置する場所です。

49
yogesh kumar

ポップアップページを指定する代わりに、chrome.browserAction.onClicked AP​​I、文書化 ここ

5
Boris Smus

これはまさに私が必要なものでしたが、これを追加する必要があります:ユーザーが拡張機能のアイコンをクリックしたときのような1回限りのイベントだけが必要な場合、Background Pagesは常にバックグラウンドで実行されるためリソースの無駄です。代わりにイベントページを使用します。

"background": {
    "scripts": ["script.js"],
    "persistent": false
}
0
JustAGuy

バックグラウンドファイルを追加する必要があります。しかし、まず、manifest.jsonに次のような属性を追加する必要があります。

"background":{
    "scripts":["background.js"]
}

拡張フォルダ内のファイルにbackground.jsという名前を付けます。バックグラウンドからコンテンツスクリプトにオブジェクトを送信する方法があります。コンテンツスクリプトの名前がcontent.jsの場合、このコードスニペットをbackground.jsファイルに記述する必要があります。

chrome.browserAction.onClicked.addListener(sendfunc);
function sendfunc(tab){
msg={txtt:"execute"};
chrome.tabs.sendMessage(tab.id,msg);
}

上記のコードが行っているのは、msgという名前のオブジェクトをコンテンツページに送信することです。このmsgオブジェクトには、「execute」に等しいプロパティtxttがあります。次に行う必要があるのは、コンテンツスクリプトの値を次のように比較することです。

chrome.runtime.onMessage.addListener(recievefunc);
function receivefunc(mssg,sender,sendResponse){
if(mssg.txtt==="execute"){



/*  
your code of content script
goes here
*/



}
}

拡張アイコンをクリックすると、msgという名前のオブジェクトがバックグラウンドからコンテンツに送信されるようになりました。関数 "recievefunc()"は、残りのコードが実行されると一致する場合、そのtxttプロパティを文字列 "execute"と比較します。

注:msg、txtt、sendfunc、receivefunc、mssgはすべて変数であり、chromeキーワードではないため、任意のキーワードを使用できます。

それが役に立てば幸い。

:)

0
rishuverma