ユーザーがアイコンをクリックするたびにスクリプトが実行されるが、ポップアップが開かないようにchrome拡張機能を書くにはどうすればよいですか?私はこの時点で、突然動作を停止し、すべてのページを404しました。
マニフェストを正しく設定しているだけだと思います。私が今持っているものは次のとおりです。
{
"name": "My Extension",
"version": "0.1",
"description": "Does some simple stuff",
"browser_action": {
"popup" : "mine.html",
"default_icon": "logo.png"
},
"permissions": [
"notifications"
]
}
まず、ポップアップを表示したくない場合は、"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
パーミッションが追加されていることに注意してください。次に、アイコンがクリックされたときにスクリプトを実行するには、以下のコードをbackground.js
ファイル(ファイル名はmanifest.json
):
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null, {file: "testScript.js"});
});
最後に、 testScript.js
は、アイコンをクリックしたときに実行するコードを配置する場所です。
ポップアップページを指定する代わりに、chrome.browserAction.onClicked
API、文書化 ここ 。
これはまさに私が必要なものでしたが、これを追加する必要があります:ユーザーが拡張機能のアイコンをクリックしたときのような1回限りのイベントだけが必要な場合、Background Pagesは常にバックグラウンドで実行されるためリソースの無駄です。代わりにイベントページを使用します。
"background": {
"scripts": ["script.js"],
"persistent": false
}
バックグラウンドファイルを追加する必要があります。しかし、まず、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キーワードではないため、任意のキーワードを使用できます。
それが役に立てば幸い。
:)