Veröffentlicht am 13. April 2026
Die Kommunikation zwischen verschiedenen Erweiterungskomponenten (Hintergrundskripts, Inhaltsskripts, Pop-ups) basiert traditionell auf der JSON-Serialisierung. JSON ist zwar zuverlässig, hat aber auch Einschränkungen.
Ab Chrome 148 können Erweiterungsentwickler den strukturierten Klonalgorithmus für die Nachrichtenserialisierung anstelle von JSON verwenden. Mit dieser Modernisierung können Sie komplexere Datentypen zwischen Ihren Erweiterungskontexten senden, ohne manuelle Serialisierungslösungen zu verwenden.
Warum strukturierter Klon?
Die JSON-Serialisierung (über JSON.stringify im Hintergrund) funktioniert, aber manchmal müssen Entwickler Umwege gehen, wenn sie mit modernen JavaScript-Typen arbeiten.
Hier ein konkretes Beispiel, das Ihnen bei der Entwicklung einer Erweiterung möglicherweise begegnet ist:
// Sending a Map with JSON serialization
const myMap = new Map([['id', 123]]);
// Arrives as {} on the other side!
chrome.runtime.sendMessage(myMap);
// Workaround: Convert Map to an Array of entries before sending
const message = Array.from(myMap.entries());
chrome.runtime.sendMessage(message);
// On the receiving side:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
const receivedMap = new Map(message);
});
Einige andere Situationen, in denen JSON fehlschlägt und für die Sie möglicherweise eine Lösung finden mussten, sind Set, BigInt, NaN und Infinity, Date und Error-Objekte.
Mit der strukturierten Klonserialisierung können Sie jetzt verschiedene Objekte senden, die zuvor nur schwer oder gar nicht über die Erweiterungsnachrichtenübertragung gesendet werden konnten.
Das Senden eines Map-Objekts ist jetzt beispielsweise direkt möglich:
// Sending a Map with Structured Clone
const myMap = new Map([['id', 123]]);
// Arrives as a Map on the other side!
chrome.runtime.sendMessage(myMap);
// On the receiving side:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
// message is already a Map instance!
console.log(message.get('id')); // 123
});
Weitere unterstützte Typen
Der strukturierte Klon unterstützt eine Vielzahl anderer
Typen
wie File und Blob.
Für das Betatestprogramm anmelden
Um die Abwärtskompatibilität zu gewährleisten und zu verhindern, dass vorhandene Erweiterungen beschädigt werden, ist diese Funktion optional. Sie können sie global für Ihre Erweiterung aktivieren, indem Sie einen einzelnen Schlüssel zu Ihrer manifest.json hinzufügen:
{
"name": "My Extension",
"version": "1.0",
"manifest_version": 3,
"message_serialization": "structured_clone"
}
Wenn der Schlüssel fehlt oder eine Chrome-Version niedriger als 148 verwendet wird, verwendet der Browser standardmäßig die aktuelle JSON-basierte Implementierung für die Erweiterung.
Durch die Unterstützung des strukturierten Klonalgorithmus wird die Erweiterungs-Messaging-API an die Standardfunktionen der Webplattform angeglichen (ähnlich wie postMessage in Web Workern und der iframe-Kommunikation). So erhalten Sie mehr Flexibilität und Leistung.
Interoperabilität und Fallstricke
Unsere Implementierung der strukturierten Klonserialisierung unterstützt zwar viel mehr Typen als JSON, es gibt jedoch einige architektonische Annahmen und Inkompatibilitäten mit der Implementierung, die Sie beachten sollten.
Nicht unterstützte Typen
Freigegebene Objekte wie
SharedArrayBuffer
und die Übertragung von
Objekten
wie ArrayBuffer werden in unserer Implementierung nicht unterstützt.
SharedArrayBuffer kann je nach Situation nicht serialisiert oder deserialisiert werden. Wenn Sie versuchen, ein übertragbares Objekt wie Uint8Array zu senden, wird stattdessen eine Kopie gesendet.
Kommunikation zwischen Erweiterungen
Wir erzwingen übereinstimmende Serialisierungsformate, um die Datenintegrität zu gewährleisten. Erweiterungen mit nicht übereinstimmenden Serialisierungsformaten können nicht direkt über runtime.sendMessage oder runtime.connect kommunizieren. Wenn beispielsweise Erweiterung A die JSON-Serialisierung verwendet und versucht, Erweiterung B mit dem strukturierten Klon zu kontaktieren, kann die Nachricht nicht gesendet werden und der Port wird geschlossen (und umgekehrt).
Webseitenkommunikation
Webseiten, die externally_connectable verwenden, passen sich automatisch an das Serialisierungsformat der Zielerweiterung an. Wenn Ihre Erweiterung den strukturierten Klon verwendet, verwenden Webkontexte, die Nachrichten mit der runtime-API senden, automatisch den strukturierten Klon (und umgekehrt). Das bedeutet, dass die Website und die Erweiterung hinsichtlich des erwarteten Serialisierungsformats synchron sein müssen, um Serialisierungsfehler zu vermeiden.
Natives Messaging
Bei nativen Messaging-Kanälen wird weiterhin immer die JSON-Serialisierung erzwungen.
Wenn Sie versuchen, Typen zu senden, die nur mit dem strukturierten Klon funktionieren (z. B. BigInt), schlägt der Vorgang fehl, bevor eine Nachricht den Kontext Ihrer Erweiterung verlässt.
toJSON()-Methoden
Wenn Sie Klassen oder Objekte mit benutzerdefinierten toJSON()-Methoden verwenden, um eine benutzerdefinierte Serialisierung durchzuführen (z. B. Daten bereinigen, indem Sie Passwörter entfernen, bevor Sie ein Objekt senden), beachten Sie, dass der strukturierte Klon toJSON() ignoriert. Er kopiert die Werte der Eigenschaften direkt. Wenn Sie toJSON() für die benutzerdefinierte Serialisierung verwenden, sind vor dem Senden möglicherweise einige manuelle Schritte erforderlich. Beispiel:
class User {
constructor(name, password) {
this.name = name;
this.password = password;
}
// This will be ignored by structured clone!
toJSON() {
return { name: this.name };
}
}
const user = new User("Alice", "secret123");
// JSON -> {"name":"Alice"}
// Structured Clone -> { name: "Alice", password: "secret123" }
Wird die JSON-Serialisierung eingestellt?
Nein! Chrome wird voraussichtlich beide Serialisierungsformate weiterhin unterstützen.
Feedback geben
Wir hoffen, dass diese neue Funktion Ihnen reibungslosere und leistungsstärkere Arbeitsabläufe für die Entwicklung von Erweiterungen ermöglicht.
Wir haben zwar eine Testsuite erstellt, um die Funktionalität unserer Implementierung des strukturierten Klons zu validieren, aber die Webplattform bietet eine Vielzahl von Objekten. Probieren Sie diese neue Funktion aus und melden Sie alle Fehler oder Grenzfälle, die Ihnen begegnen. Ihr Feedback hilft uns, die Implementierung für die gesamte Community zu verbessern.