web-dev-qa-db-ja.com

Chrome Extensionは、Background.jsからコンテンツスクリプトにメッセージを送信します

方法についてのドキュメントを読みましたバックグラウンド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!");
   }
});
20
Tyler Rafferty

@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) {});  
      });
   }
});
13
Tyler Rafferty

各スクリプトにその存在をアナウンスさせる場合(私はalertよりも_console.log_の方が好きです)、バックグラウンドスクリプトは(インストール時または起動時に)1回実行され、コンテンツスクリプトは新しいページごとに実行されます。これは、外部イベントでメッセージをトリガーする必要があることを意味します。何かのようなもの

_chrome.pageAction.onClicked.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id,{action:"SendIt"});
});
_

また、必要に応じてchrome.pageAction.show(tabId);を呼び出すことを忘れないでください。

0
Teepeemm

補足:chrome.extension.onMessageは非推奨ですが、chrome.runtime.onMessageを使用する必要があります-これで問題が解決するとは思いません。

コンテンツスクリプトを使用して縮小したjqueryファイルを挿入する際に問題があったことを覚えています。非縮小バージョン(つまり、jquery-1.8.3.js)を使用してみてください。それが済んだら、マニフェストファイルのjquery-1.8.3.jsweb_accessible_resourcesも追加します。 (それについて読んでください ここ

それでも機能しない場合は、マニフェストのアクセス許可配列に"<all_urls>"を追加することをお勧めします。

0
berrberr