Was ist eine Single-Page App (SPA)?
Definition und Zweck
Eine Single-Page Application (SPA) ist eine Art Webanwendung, die entwickelt wurde, um eine reibungslosere und schnellere Benutzererfahrung zu bieten, indem Inhalte dynamisch aktualisiert werden, ohne die gesamte Seite neu zu laden. SPAs werden typischerweise mit modernen JavaScript-Frameworks wie React, Next.js oder Vue.js erstellt. Viele SPAs nutzen auch Server-Side Rendering (SSR), was die Komplexität für clientseitige Implementierungen wie A/B-Tests und Personalisierung erhöht. Der Hauptvorteil von SPAs besteht darin, das Navigationserlebnis des Besuchers zu verbessern, indem Ressourcen einmal geladen und Inhalte dynamisch aktualisiert werden, anstatt die gesamte Seite nach jeder Aktion neu zu laden.Implementierungsherausforderungen und Lösungen
SPAs bringen einzigartige Herausforderungen für Tools wie Kameleoon mit sich, die sich auf Seitenladevorgänge verlassen, um Variationen anzuwenden oder Skripte auszuführen. Um eine optimale Leistung zu gewährleisten, ist es entscheidend, die Implementierungsstrategie an den Typ der SPA anzupassen, mit dem Sie arbeiten. In den folgenden Abschnitten werden wir bewährte Praktiken und Verfahren zur Bewältigung jedes Szenarios darlegen, um eine reibungslose Integration und eine genaue Verfolgung des Besucherverhaltens auf Ihrer Website zu gewährleisten.Native Einrichtung
Wenn Ihre Website eine vollständige SPA ist, stellt das Aktivieren der Option „support for dynamic websites” sicher, dass Kameleoon nach URL-Änderungen sucht. Wenn sich die URL ändert, werden alle Kameleoon-Skripte neu ausgeführt, einschließlich des Targeting- und Variation-Codes. Kameleoon überwacht auch Aktualisierungen in Ihrer SPA, indem es einenMutationObserver verwendet, um Änderungen im DOM zu verfolgen, selbst wenn die Seiten-URL statisch bleibt. Dies ermöglicht es Kameleoon, Variationsänderungen dynamisch anzuwenden (oder erneut anzuwenden), während Aktualisierungen auf Ihrer Website stattfinden. Kameleoon unterstützt verschiedene Änderungen, die über den Graphic Editor vorgenommen werden, einschließlich:
- Stiländerungen
- Textänderungen
- Positionsaktualisierungen (Swap, Insert before/after)
- Benutzerdefinierte CSS-Selektoren
- Klicken Sie auf Admin > Projects.
- Suchen Sie die Karte Ihres Projekts und klicken Sie auf das Symbol Edit.
- Klicken Sie auf Configuration und klappen Sie das Menü General auf.
- Scrollen Sie nach unten zu Advanced settings und schalten Sie Enable support for dynamic websites (Single Page App, Progressive Web App…) auf ON.

- Bereich wählen: Sie können die Funktion für die gesamte Website aktivieren oder sie auf bestimmte Elemente über den Graphic Editor beschränken. Die Beschränkung des Bereichs auf ausgewählte Elemente trägt dazu bei, das Gesamtgewicht des Skripts zu reduzieren. Erfahren Sie hier, wie Sie ein Element als dynamisch markieren.
- Ein benutzerdefiniertes Attribut festlegen (optional): Diese Option verbessert die Elementidentifikation und hilft, Probleme im Zusammenhang mit dynamischen Attributen und Selektoren zu vermeiden. Wenn Ihre Website keine stabilen oder eindeutigen HTML-IDs generiert, können Sie ein benutzerdefiniertes Attribut definieren, das Kameleoon zur Identifikation modifizierter Elemente verwendet. Dieses Attribut hat beim Erstellen des Selektors Vorrang vor der Element-ID.
- Dynamische ID-Selektoren vermeiden (optional): Diese Option verbessert ebenfalls die Elementidentifikation beim Umgang mit dynamischen Attributen und Selektoren. Standardmäßig ignoriert Kameleoon HTML-IDs, die numerische Sequenzen von mehr als fünf Ziffern enthalten. Sie können bei Bedarf Ihren eigenen regulären Ausdruck definieren, um zusätzliche ID-Muster auszuschließen.
Ein benutzerdefiniertes Attribut festlegen
Sie können ein benutzerdefiniertes Attribut (z. B.data-id, data-qa) definieren, um Elemente auf der Seite zu identifizieren. Benutzerdefinierte Attribute sind besonders nützlich, wenn Ihre Website dynamische IDs für HTML-Elemente generiert.
Der Kameleoon Graphic Editor identifiziert Elemente mit CSS-Selektoren, die in zwei Kategorien fallen:
- ID-basierte Auswahl: Wenn das Element eine ID hat, verwendet Kameleoon diese, um das Element beim Laden der Seite zu lokalisieren und zu ändern.
- Kombinator-Selektor: Wenn keine ID gefunden wird, erstellt Kameleoon einen Selektorpfad über das nächstgelegene übergeordnete Element mit einer ID.
<button custom-id="1">), das Elemente über Updates hinweg zuverlässig identifiziert.
Dynamische ID-Selektoren vermeiden
Standardmäßig vermeidet Kameleoon die Verwendung von Element-IDs, die dynamisch generierte Zahlen mit mehr als fünf aufeinanderfolgenden Ziffern enthalten. Stattdessen baut es einen Pfad mithilfe eines nahegelegenen statischen übergeordneten Elements mit einer ID auf. Sie können dieses Verhalten anpassen, indem Sie einen regulären Ausdruck angeben, um bestimmte dynamische IDs auszuschließen, um ein genaueres Targeting zu gewährleisten.Benutzerdefinierte Einrichtung
Wenn Ihre Website keine vollständige SPA ist oder Sie bestimmte Teile der Website behandeln müssen, finden Sie Informationen im folgenden Abschnitt. Es gibt vier verschiedene Anwendungsfälle für benutzerdefinierte SPA-Einrichtungen.Teilweise SPAs
Um diese Option für bestimmte Seiten zu aktivieren, deaktivieren Sie sie in Advanced settings und fügen Sie den folgenden Code Ihrem Global script hinzu:Seitenänderungen ohne URL-Änderungen
In Fällen, in denen das DOM ohne URL-Änderung aktualisiert wird, verlassen Sie sich auf alternative Indikatoren, um Kameleoon neu zu laden. Nachfolgend ein Beispiel mitsessionStorage zur Erkennung von Seitenänderungen. Sie können den Code Ihrem Global script hinzufügen:
Seitenänderungen mit pathname erkennen
Für Seiten, auf denen Sie Kameleoon erneut ausführen müssen, jedoch nur wenn sich der pathname ändert (ohne Berücksichtigung von Abfrageparametern), erkennen Sie Änderungen mithilfe des pathname anstelle einer vollständigen URL. Der Code unten kann Ihrem Global script hinzugefügt werden:
Variationscode erneut anwenden, ohne Kameleoon neu zu laden
In einigen Fällen sind bestimmte Seitenelemente dynamisch, und wenn der Code rehydratisiert wird, kann er den bereits angewendeten Kameleoon-Code überschreiben. Um dies zu verhindern, haben Sie zwei Optionen:- Sie können Kameleoon mit einer der folgenden Methoden informieren, wenn die Seite oder ein bestimmtes Element fertig gerendert ist:
- Definieren Sie eine window-Variable; zum Beispiel
window.pageLoadForKam = true. - Lösen Sie auf der Seite ein Ereignis aus, auf das Kameleoon hören kann. Zum Beispiel mit
pageLoadedodercontentUpdated:window.addEventListener('pageLoaded', () -> { runKameleoonVariationCode }). - Fügen Sie dem
<body>-Tag oder dem Zielelement eine bestimmte Klasse oder ein bestimmtes Attribut hinzu. Verwenden Sie dann im Variationscode diese Klasse oder dieses Attribut, um Änderungen an der Seite oder bestimmten Elementen vorzunehmen.
- Definieren Sie eine window-Variable; zum Beispiel
- Im Variationscode können Sie das vierte Argument der Funktion
runWhenElementPresentauftruesetzen. Dieses Argument aktiviert die Unterstützung für dynamische Elemente und Single-Page-Anwendungen (SPA). Wenn diese Option aktiviert ist und der angegebene CSS-Selektor für das Element von Kameleoon beim ersten Seitenladen nicht gefunden wird, überwacht Kameleoon das DOM auf den Selektor. Sobald das Element im DOM erscheint, führt Kameleoon die Callback-Funktion aus. Wenn der Seite später ein neues Element hinzugefügt wird, das dem Selektor entspricht, führt Kameleoon den Callback mit dem neu hinzugefügten Element erneut aus.
Daten aus dem dataLayer abrufen
Bei Verwendung von GTM als Abrufmethode zum Festlegen von Custom-Data-Werten verlässt sich Kameleoon auf einen definiertendataLayer, um auf seine Werte zuzugreifen. Wenn der dataLayer nach jeder URL-Änderung aktualisiert wird, indem neue Einträge gestapelt werden, anstatt die alten zu entfernen, kann Kameleoon veraltete Werte abrufen. Dieser Abruf passiert, weil die alten Daten über Seiten hinweg bestehen bleiben und Kameleoon möglicherweise ausgeführt wird, bevor der dataLayer aktualisiert wird. Um dieses Problem zu vermeiden, stellen Sie sicher, dass veraltete Einträge entfernt werden, bevor neue hinzugefügt werden. Alternativ implementieren Sie benutzerdefinierten Code, um auf Änderungen der dataLayer-Länge zu warten, bevor die neuesten Werte abgerufen werden:
Allgemeine Überlegungen
Event-Listener, Timeouts und Intervalle
Verwenden SieKameleoon.API.Utils, um Event-Listener, Timeouts oder Intervalle zu verwalten. Diese Methoden stellen sicher, dass Listener und Timer automatisch entfernt werden, wenn eine URL-Änderung ohne Seitenneuladen erfolgt. Diese Entfernungen verhindern Duplikate, wenn Kameleoon erneut ausgeführt wird.
Eindeutige Element-IDs
Stellen Sie beim Hinzufügen von Elementen über Kameleoon sicher, dass ihreid mit kameleoonElement beginnt. Diese Namenskonvention stellt sicher, dass das Element vor der erneuten Ausführung von Kameleoon entfernt wird, wodurch Duplizierungen oder Konflikte vermieden werden.
Beispiel:
<div id="kameleoonElement-myNewCTA"></div>
Seitenaufruf-Inkrementierung
Kameleoon zählt eine neue Seite nur, wenn alle seine Skripte erneut ausgeführt werden, was unter zwei Bedingungen geschieht:- Wenn
Kameleoon.API.Core.enableSinglePageSupport()zusammen mit einer URL-Änderung aufgerufen wird. - Wenn
Kameleoon.API.Core.load()explizit ausgelöst wird.
Alternativen
REACT- und JS-SDKs
Kameleoon bietet ein React SDK und ein JavaScript/TypeScript SDK, die für Single-Page-Anwendungen konzipiert sind. Diese SDKs bieten eine alternative Methode zum Ausführen von Experimenten und zur Verwaltung von Feature Flags in Ihrer SPA, indem das SDK in die Codebasis Ihrer Anwendung integriert wird. Eine umfassende Liste der für SPAs verfügbaren Funktionen finden Sie in unserer SDK-Dokumentation.GatsbyJS-Plugin
Kameleoon bietet auch ein dediziertes Plugin für GatsbyJS-Anwendungen. Um Kameleoon in Ihre GatsbyJS-App zu integrieren, folgen Sie den Anweisungen in diesem Artikel.Next.js-Framework
Wenn Ihre Website mit Next.js erstellt wurde, gibt es eine wichtige Überlegung bei der Verwendung des Graphic Editors von Kameleoon. Next.js-Websites laden auf eine bestimmte Weise, die zu Konflikten mit Kameleoons Änderungen führen kann, wenn diese zu schnell erfolgen, was dazu führen kann, dass die Seite falsch angezeigt wird.Empfohlene Lösung
Das Kameleoon-Team hat einen dedizierten Next.js-Einrichtungsleitfaden erstellt, der dieses Problem automatisch löst. Diese Einrichtung stellt sicher:- Kameleoon lädt schnell und effizient.
- Ihre Seite wird ohne Flickering reibungslos angezeigt.
- Änderungen erscheinen zur richtigen Zeit, ohne Ihre Website zu beschädigen.
- Die Seitennavigation funktioniert korrekt.
Alternative Ansätze
Wenn Sie die oben empfohlene Einrichtung nicht verwenden können, gibt es andere Möglichkeiten, Konflikte zu vermeiden. Ihr Entwickler kann ein einfaches Signal hinzufügen, das Kameleoon mitteilt: „Die Seite ist jetzt bereit für Änderungen.”- Methode 1: Seitenbereitschafts-Indikator
- Fügen Sie dem
<body>-Element einen Marker hinzu, sobald die Seite vollständig geladen ist. Konfigurieren Sie dann Ihre Kameleoon-Experimente so, dass sie nur ausgeführt werden, wenn dieser Marker vorhanden ist.
- Fügen Sie dem
- Methode 2: Benutzerdefiniertes Ereignis
- Verwenden Sie Kameleoons Befehlswarteschlange, um ein Signal zu senden, sobald Ihre Seite bereit ist:
Events.trigger('my page is hydrated'). - Konfigurieren Sie dann Ihre Experimente, um die Targeting-Kriterien Custom event zu verwenden, um auf dieses Signal zu warten, bevor Änderungen vorgenommen werden. Weitere Details zur Implementierung benutzerdefinierter Ereignisse und anderer Targetings finden Sie in diesem Artikel
- Verwenden Sie Kameleoons Befehlswarteschlange, um ein Signal zu senden, sobald Ihre Seite bereit ist:
Die dedizierte Next.js-Einrichtung erledigt all dies automatisch, sodass Sie sich keine Sorgen um diese technischen Details machen müssen.