2017-03-12 6 views
0

thisを読んで他の場所で検索しましたが、この問題を解決できません。私は長寿命の接続を使用しています。私はコンテンツスクリプトからバックグラウンドにメッセージを送り、その後、バックグラウンドからコンテンツスクリプトにメッセージを送りたい。Chrome拡張機能長期間接続:背景からコンテンツへのメッセージの取得

var port = chrome.runtime.connect({name: "my-channel"}); 

// receive messages 
port.onMessage.addListener(function(msg) { 
    console.log(msg); // doesn't log anything  
}); 

document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById('alertButton').addEventListener('click', function() { 
     // send message 
     port.postMessage({myProperty: "value"}); 
    }); 
}); 

背景:

chrome.runtime.onConnect.addListener(function(port) { 
    if(port.name == "my-channel"){ 
     port.onMessage.addListener(function(msg) { 
      // do something 
      // then send message to the content 
      port.postMessage({myProperty: "value"}); 
     }); 
    } 
}); 

EDIT:私のmanifest.jsonを

しかし、私は...

コンテンツスクリプト何らかの理由でコンテンツファイルにメッセージを受信することはできませんよ

{ 
    "manifest_version": 2, 
    "name": "Test extension", 
    "version": "1.0", 
    "browser_action": { 
    "default_popup": "main_ui.html", 
    "default_title": "Test Extension" 
    }, 
    "content_scripts": [{ 
    "matches": ["<all_urls>"], 
    "js": ["logic.js"] 
    }], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 
    "permissions": [ 
    "tabs", 
    "activeTab" 
    ] 
} 
+0

@wOxxOmボタンをクリックすると、バックグラウンドでメッセージを受け取ることができます。 – DigitalEvolution

+0

ええと、投稿されたコードの断片だけでは原因を明らかにすることができません。デバッグを試してください:バックグラウンドページのport.postMessageにブレークポイントを設定し、それがまったく動作するかどうかを確認してください。 – wOxxOm

+1

トピックになる質問を編集してください:問題を複製する[mcve]を含めてください。 Chrome拡張機能やFirefox WebExtensionsの場合は、* manifest.json *や背景/コンテンツ/ポップアップスクリプト/ HTMLの一部を含むことがほとんどです。 (1)望ましい動作、(2)特定の問題またはエラー、(3)それを再現するために必要な最短のコードを含める必要があります。質問自体に*。また、[ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)、[ask]を参照してください。 – Makyen

答えて

0

解決方法:接続が発生したときの古い「ポート」の参照を使用していました。リスナーの第2引数(そこには表示されません)は実際にはポートです。

関連する問題