2016-04-07 12 views
0

クロムプラグインの作成を試していますMessage Passing。 私のコードは次のとおりです。バックグラウンドスクリプトからコンテンツスクリプトに渡すChrome拡張メッセージが機能しない

manifest.jsonを:

{ 
    "name": "Sending Messages Test", 
    "version": "1.0", 
    "manifest_version": 2, 
    "description": "Send a Message to background.js from contentscript.js and send reply", 
    "background": { 
     "scripts": ["background.js"], 
     "persistent": false 
    }, 
    "browser_action": { 
     "default_title": "That's the tool tip", 
     "default_popup": "popup.html" 
    }, 
    // "permissions": ["tabs"], 
    "content_scripts": [{ 
     "matches": ["http://*/*", "https://*/*"], 
     "js": ["contentscript.js"] 
    }] 
} 

popup.html:

<script type="text/javascript" src="popup.js"></script> 
<div style="width:200px"> 
    <button id="button">Color all the divs</button> 
</div> 

popup.js:

window.onload = function() { 
    document.getElementById("button").onclick = function() { 
    // alert("in popup.js"); 
    chrome.extension.sendMessage({ 
     message: "coming from popup" 
    }); 
    } 
} 

contentscript.js

chrome.runtime.onMessage.addListener(function(request, sender) { 
    alert("Contentscript has received a message from from background script: '" + request.message + "'"); 
    return true; 
}); 

background.js:

var backgroundScriptMessage = " purple monkey dishwasher"; 

chrome.extension.onMessage.addListener(function(request, sender) { 
    alert("Background script has received a message from contentscript:'" + request.message + "'"); 
    returnMessage(request.message); 
}); 

function returnMessage(messageToReturn) { 
    chrome.tabs.query({active: true}, function(tabs) { 
     var joinedMessage = messageToReturn + backgroundScriptMessage; 
     alert("Background script is sending a message to contentscript:'" + joinedMessage +"'"); 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}); 
    }); 
} 

私はChromeの拡張機能でプラグインを解凍し、生成されたアイコンをクリックすると、私は2つのアラート

  1. 背景スクリプトがcontentscriptからメッセージを受信した参照してください。 'ポップアップから来る'
  2. バックグラウンドスクリプトは、「ポップアップから来ている」という内容のメッセージからメッセージを受け取りました。紫色の猿食器洗い機

であり、contentscriptにある3番目のポップアップは表示されません。私はエラーを探してみましたが、運はありませんでした。誰かが解決策を持っていますか?現在アクティブなタブを照会する場合

+0

この行のコメントを外しましたか?["permissions":["tabs"]、? – rafaelcpalmeida

+0

また、background.jsファイルは何ですか? – rafaelcpalmeida

+0

私は '' permissions ''をコメント解除しようとしました:["tabs"]、 '、動作しませんでした –

答えて

0

currentWindow: true

function returnMessage(messageToReturn) { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     var joinedMessage = messageToReturn + backgroundScriptMessage; 
      alert("Background script is sending a message to contentscript:'" + joinedMessage +"'"); 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}); 
    }); 
} 

を追加し、runtime.onMessageの代わりextension.onMessageを使用してくださいすることを忘れないでください。

ところで、sender.tab.idを使用して、runtime.onMessageリスナーに送信者タブIDを取得して、タブ状態をクエリする必要はありません。

+0

メッセージを送信する必要があるタブを知らない可能性があります – rafaelcpalmeida

+0

私は動作しませんでした –

+0

@gautamscoders、現在のタブを照会するときに 'currentWindow'プロパティを忘れるべきである –

関連する問題