Website-Widget
Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen
Auf einer Website läuft Lingara als Custom Element, <lingara-embed>. Das Element zeichnet die Übungen von Lingara in einem Frame, den Lingara ausliefert, sodass Ihre Seite die Daten des Lernenden nie sieht und die Seite von Lingara nie Ihre.
Das Element einbinden
Installieren Sie @lingara/embed über npm, oder laden Sie seinen Modul-Build von einem CDN, wenn Ihre Website keinen Bundler hat. Setzen Sie dann <lingara-embed> auf die Seite und definieren Sie es. Das Element nimmt:
plan-id, den zu übenden Lektionsplan, einen, der dem Spieler gehört;surface, was angezeigt werden soll:practice, der Standard und die einzige Oberfläche, die es gibt;theme, eines vonlight,darkoderauto;locale, die Sprache der eigenen Wörter des Frames, die sonst dem Lernenden folgt;title, der barrierefreie Name des Frames.
Das Styling endet beim Theme. Ihre Seite kann nicht in den Frame hineingreifen, und das Theme ist die einzige Einstellung, die er anbietet.
Ihm Tokens geben
Setzen Sie den tokenProvider des Elements auf eine Funktion, die Ihren eigenen Server um ein Token bittet. Ihr Server stellt es mit dem Origin der Seite aus, mit einem Server-Kit, und antwortet mit dem Token und seinem Ablaufzeitpunkt. Das Element übergibt das Token per Nachricht an den Frame, und es wird nie in einer URL übertragen.
Registrieren Sie jeden Origin, auf dem das Widget läuft, bevor Sie dafür ein Token ausstellen, in den Einstellungen Ihres Clients in der Konsole. Die Seite Server-Kits beschreibt, wie. Die API lehnt ein Token ab, das für einen anderen Origin ausgestellt wurde, und der Frame zeigt dann einen Fehler statt der Übung.
Ein Server-Kit kann auch das ganze Snippet für Sie schreiben, Element und Token-Provider zusammen, mit der Script-Nonce Ihrer Seite, falls Ihre Content Security Policy eine verlangt. Das letzte Beispiel unten zeigt es.
Hören, was der Frame sagt
Der Frame spricht mit dem Element über ein versioniertes Nachrichtenprotokoll, und das Element macht aus dem, was Ihre Seite braucht, DOM-Events:
lingara:practice-completed, wenn der Lernende ein Set abschließt, mit seinerplanId,setNumber,correctundtotal;lingara:error, wenn der Frame stoppt, mit einemcodeundretryable. Ein Fehler mit Wiederholungsmöglichkeit bedeutet, dass ein neues Einbinden gelingen kann; wann Sie es erneut versuchen, entscheiden Sie.
Das Ergebnis der Übung erreicht auch Ihren Server, wie unter Übungsergebnisse beschrieben.
npm install @lingara/embed@0.1.0-alpha.6
# No bundler? One module script instead:
# <script type="module" src="https://cdn.jsdelivr.net/npm/@lingara/embed@0.1.0-alpha.6/dist/lingara-embed.min.js"></script><!-- plan-id is a lesson plan your server made for this player. -->
<lingara-embed surface="practice" plan-id="0b9d4f2e-3c1a-4e8b-9f6d-2a7c5e1b8d40" theme="auto" title="Practice"></lingara-embed>
<script type="module">
import { defineLingaraEmbed } from '@lingara/embed'
defineLingaraEmbed()
</script>// Your own endpoint, on your own server. It mints with this page's origin and
// returns exactly { token, expires_at }: the token (lgr_et_…) never touches a URL.
widget.tokenProvider = async () => {
const response = await fetch('/lingara/token', { method: 'POST', credentials: 'same-origin' })
if (!response.ok) throw new Error(`token endpoint answered ${response.status}`)
return response.json()
}widget.addEventListener('lingara:practice-completed', (event) => {
const { planId, setNumber, correct, total } = (event as CustomEvent).detail
console.log(`set ${setNumber} of ${planId}: ${correct}/${total}`)
})
widget.addEventListener('lingara:error', (event) => {
const { code, retryable } = (event as CustomEvent).detail
// `retryable` means a remount may succeed; when to try is yours to decide.
if (retryable) setTimeout(() => widget.reload(), 30_000)
else console.warn('Lingara practice stopped:', code)
})