Onlineshop-Widget
Ereignisse
Das postMessage-Protokoll zwischen Widget und Ihrer Seite — die Ereignisse, die das Widget sendet, und was jedes einzelne trägt.
Das SDK wandelt die postMessage-Ereignisse des Widgets in die Callbacks um, die in der SDK-Referenz beschrieben sind. Wenn Sie stattdessen einen rohen iframe einbetten, ist diese Seite das Protokoll, das Sie selbst implementieren. Verwenden Sie im Allgemeinen das SDK — es übernimmt das für Sie.
Nachrichtenformat
Jede Nachricht hat einen source-Diskriminator und einen type:
{ "source": "scalarcut-embed", "type": "ready" }
- Das Widget sendet Nachrichten mit
source: "scalarcut-embed". - Die Elternseite sendet Befehle mit
source: "scalarcut-embed-parent".
Ereignisse Widget → Eltern
| Typ | Payload | Bedeutung |
|---|---|---|
ready |
— | Das Widget hat gebootet und lauscht auf Befehle. |
bomUpdated |
Kalkulationsobjekt | Die Materialliste hat sich geändert. |
addToCartRequest |
{ lines, layoutFingerprint, layoutToken } |
Der Käufer hat auf „In den Warenkorb" geklickt. |
resize |
{ height: number } |
Das Widget fordert eine neue Framehöhe an. |
error |
Fehlerobjekt | Das Widget traf auf einen Fehler, den es nicht selbst lösen konnte. |
addToCartRequest
{
"source": "scalarcut-embed",
"type": "addToCartRequest",
"lines": [
{ "sku": "TILE-600-300", "qty": 5, "unit": "box" }
],
"layoutFingerprint": "…",
"layoutToken": "…"
}
Die Antwort enthält immer eine Fliesenzeile. Wenn Verbrauchsmaterial-in-den-Warenkorb für den Shop aktiviert ist, werden Kleber-, Fugenmörtel- und Grundierungszeilen ebenfalls hinzugefügt. Fügen Sie jede Zeile dem Warenkorb Ihres Shops hinzu. Wie Preis und Bestand in Ihrem Checkout maßgeblich bleiben, siehe Warenkorb-Integration.
resize
Das Widget meldet die benötigte Höhe. Eine Roh-iframe-Integration sollte sie respektieren, damit der Frame nie in einem abgeschnittenen Kasten scrollt:
window.addEventListener('message', (event) => {
const data = event.data;
if (data?.source !== 'scalarcut-embed') return;
if (data.type === 'resize') {
frame.style.height = `${data.height}px`;
}
});
Befehle Eltern → Widget
Das SDK stellt diese als Handle-Methoden bereit; das Rohprotokoll ist:
| Typ | Daten | SDK-Äquivalent |
|---|---|---|
setSku |
{ sku } |
handle.setSku(sku) |
exportBlueprint |
— | handle.exportBlueprint() |
requestAddToCart |
— | handle.requestAddToCart() |
frame.contentWindow.postMessage(
{ source: 'scalarcut-embed-parent', type: 'setSku', sku: 'NEXT_SKU' },
'https://embed.scalarcut.com',
);
Origin-Prüfungen
Beide Seiten prüfen den Origin der Nachricht, bevor sie handeln. Das SDK erledigt das bereits; wenn Sie das Protokoll selbst implementieren, vergleichen Sie event.origin mit dem Embed-Origin und ignorieren Sie alles, was nicht übereinstimmt.