In meiner Erweiterung verbinden sich verschiedene Inhaltsskripte mit background.js, um miteinander zu kommunizieren. Das Problem, das ich habe, ist, dass ich, wenn ich eine Nachricht an einem Port empfange, diese Informationen nicht an den anderen Port weiterleiten kann. Der Fehler Ich erhalte ist:Chrome-Erweiterung - Messaging mit mehreren Ports
Error: Attempting to use a disconnected port object
Mein Code in 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)
});
}
});
Der pageport in content.js aktiviert wird:
var page_port = chrome.runtime.connect({name: "pageport"});
page_port.postMessage({source: "page", status: "ready"});
page_port.onMessage.addListener(function(msg) {
console.log(msg)
});
Der menuport arbeitet mit einem ähnlichen Skript. Die Aktivierung beider Ports funktioniert, ich kann in der Konsole sehen. Ich kann jedoch keine Nachricht von background.js an einen Port senden.
Perfekt, löste es. Vielen Dank! – Vincent
@Vincent ist nicht die Portvariable, die bereits im Funktionskontext gespeichert wurde? Seltsam, dass es funktioniert hat. – user5858
Es ist an einem Ende gespeichert, aber nicht auf der anderen Seite. Da ich mit mehreren Ports pro Seite arbeite, verwende ich den Namen, um sie zu identifizieren. – Vincent