איך אפשר לעזור?

אפשר לתאר בקצרה במה מדובר, ונחזור בדוא״ל.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
לעמוד הבית

Jednostránkové aplikace a změny stránek

Jak widget sám rozpoznává změny stránek v React, Vue, Angular, Next.js, Turbo nebo htmx, co při tom hlásí serveru a na co myslet v jednostránkové aplikaci.

V jednostránkové aplikaci prohlížeč načte stránku jen jednou; potom framework vyměňuje obsah a mění adresu přes history.pushState. Widget tyto změny rozpoznává sám. Nemusíte nic hlásit ani restartovat.

Vložení: právě jednou

Umístěte loader jednou do základního rámce aplikace (index.html, kořenové rozložení, _document), ne do komponenty, která se při každé změně trasy znovu vykreslí. Druhé vložení nevadí (druhý loader nic nedělá, viz Značka script), ale odstranění a opětovné vložení značky widget nerestartuje.

// Next.js (App Router), app/layout.tsx
import Script from 'next/script';

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Script src="https://cdn.reactive.chat/loader.js"
                data-rc-site-key="SITE_KEY"
                strategy="afterInteractive" />
      </body>
    </html>
  );
}

Nejsnazší způsob, jak ověřit, zda pomocník frameworku předává atributy data-* do vygenerovaného <script>, je inspektor prvků. Pokud tam data-rc-site-key chybí, nic se nespustí.

Jak se rozpoznávají změny stránek

Widget nezasahuje do history.pushState; pouze sleduje:

  1. Navigation API prohlížeče (navigation.currententrychange), pokud je k dispozici;
  2. jinak popstate a hashchange;
  3. navíc časovač, který najde změny adresy bez události (každou sekundu, s Navigation API každých 5 sekund);
  4. pageshow při návratu z mezipaměti zpět/vpřed.

Za změnu stránky se počítá: nová adresa (cesta nebo dotaz) a hashové trasy ve tvaru #/… a #!/…. Za změnu stránky se nepočítá: pouhý přechod na kotvu (#section) a replaceState na stejnou adresu.

Co se hlásí

400 ms po změně (aby se nepočítaly mezistavy přesměrování) odešle widget serveru kontextový rámec — pouze se souhlasem:

Pokud aplikace nastaví název až po změně, widget po 2 sekundách odešle opravu. Operátoři v pultu tak vidí, na které stránce návštěvník právě je, a asistent vztahuje odpověď k této stránce.

Widget také znovu načítá viditelný text stránky (pro odpovědi o aktuální stránce a funkci „Ukažte mi to“) — nejdříve 1,2 sekundy po poslední změně, nejvýše každých 5 sekund, nikdy na stránkách jako account, checkout nebo cart a nikdy z formulářových polí. Oblasti, které asistent nemá číst, označte data-rc-private (Značka script).

Předání vlastního kontextu pro každou stránku

Samostatná metoda pro hlášení změny stránky neexistuje a není potřeba. Pokud chcete předat další údaje o aktuální stránce, například zobrazený produkt, použijte po změně trasy track:

// React Router
const location = useLocation();
useEffect(() => {
  if (produkt) {
    window.ReactiveChat('track', 'produktseite', {
      page_type: 'product', product_id: produkt.sku, price: produkt.preis,
      currency: 'EUR', in_stock: produkt.lieferbar
    });
  }
}, [location.pathname, produkt]);

Která pole dorazí, je uvedeno v části Identifikace návštěvníků a předávání kontextu.

Turbo, htmx, Livewire

Frameworky, které vyměňují celé <body>, při tom odstraní i prvek widgetu. Widget se pak znovu připojí (nejvýše desetkrát za minutu); konverzace pokračuje.

Přihlášení uživatelé v SPA

Pokud se někdo přihlásí bez opětovného načtení, zavolejte poté identify s hashem čerstvě získaným ze serveru. Při změně uživatele widget oddělí rozepsaný koncept od předchozího uživatele. Podrobnosti v části Identifikace návštěvníků.

Text o ochraně osobních údajů v SPA

Pokud aplikace vloží zásady ochrany osobních údajů až po načtení, widget přesto prvek data-rc-privacy najde (sleduje dokument). Viz Integrace soukromí.

Dále: Zabezpečení a CSP

עדכון אחרון: