私の拡張機能では、さまざまなコンテンツスクリプトがbackground.jsに接続してお互いに通信します。私が抱えている問題は、あるポートでメッセージを受信すると、この情報を他のポートに転送できないということです。私は取得していますエラーは次のとおりです。Chrome拡張機能 - 複数のポートでのメッセージ送信
Error: Attempting to use a disconnected port object
background.jsで私のコード
chrome.runtime.onConnect.addListener(function(port) {
if(port.name === "menuport") {
port.onMessage.addListener(function(msg) {
console.log('BGJS from menuport')
console.log(msg)
var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage(msg);
});
} else if (port.name === "pageport") {
port.onMessage.addListener(function(msg) {
console.log('BGJS from pageport')
console.log(msg)
});
}
});
pageportがcontent.jsで活性化される:
var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage({source: "page", status: "ready"});
page_port.onMessage.addListener(function(msg) {
console.log(msg)
});
menuportは類似して動作しますスクリプト。両方のポートのアクティブ化が機能し、コンソールに表示されます。しかし、私はbackground.jsからポートにメッセージを投稿することはできません。
完璧、解決しました。ありがとうございました! – Vincent
@Vincentは、すでに関数コンテキストに保存されているポート変数ではありませんか?奇妙なことにはうまくいった。 – user5858
一方の端には保存されますが、他方の端には保存されません。私はページあたり複数のポートで作業しているので、それらを識別するために名前を使用しています。 – Vincent