方法についてのドキュメントを読みましたバックグラウンドJavaScriptファイル(main.js)からメッセージをコンテンツスクリプト(content.js)に送信ですが、onMessageでアラートを開くことができません。
Manifest.json
{
"name": "Example",
"version": "1.0.1",
"manifest_version" : 2,
"description": "Example Description",
"background" : {
"scripts" : ["main.js"]
},
"page_action" : {
"default_icon": {
"19": "icons/19.png",
"38": "icons/38.png"
},
"default_title" : "Example Title"
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["lib/jquery-1.8.3.min.js","scripts/content.js"],
"run_at": "document_idle",
"all_frames": false
}],
"permissions": [
"tabs",
"geolocation"
],
"icons": {
"16": "icons/16.png",
"48": "icons/48.png",
"128": "icons/48.png"
}
}
バックグラウンドJavaScriptファイル(main.js)
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
コンテンツJavaScriptファイル(content.js)
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.action == 'SendIt') {
alert("Message recieved!");
}
});
@Teepeemmの洞察のおかげで、メッセージをコンテンツスクリプトに送信する前にトップロードの完了を含めました。
タブが完全に読み込まれるのを待ちます
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "SendIt"}, function(response) {});
});
}
});
各スクリプトにその存在をアナウンスさせる場合(私はalert
よりも_console.log
_の方が好きです)、バックグラウンドスクリプトは(インストール時または起動時に)1回実行され、コンテンツスクリプトは新しいページごとに実行されます。これは、外部イベントでメッセージをトリガーする必要があることを意味します。何かのようなもの
_chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});
_
また、必要に応じてchrome.pageAction.show(tabId);
を呼び出すことを忘れないでください。
補足:chrome.extension.onMessage
は非推奨ですが、chrome.runtime.onMessage
を使用する必要があります-これで問題が解決するとは思いません。
コンテンツスクリプトを使用して縮小したjqueryファイルを挿入する際に問題があったことを覚えています。非縮小バージョン(つまり、jquery-1.8.3.js)を使用してみてください。それが済んだら、マニフェストファイルのjquery-1.8.3.js
にweb_accessible_resources
も追加します。 (それについて読んでください ここ )
それでも機能しない場合は、マニフェストのアクセス許可配列に"<all_urls>"
を追加することをお勧めします。