Websitewidget
Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina
Op een website draait Lingara als custom element, <lingara-embed>. Het element tekent de oefeningen van Lingara in een frame dat Lingara serveert, zodat je pagina de gegevens van de leerling nooit ziet en de pagina van Lingara nooit de jouwe.
Het element plaatsen
Installeer @lingara/embed via npm, of laad de modulebuild vanaf een CDN als je site geen bundler heeft. Zet daarna <lingara-embed> op de pagina en definieer het. Het element accepteert:
plan-id, het lesplan om te oefenen, een plan dat van de speler is;surface, wat er getoond wordt:practice, de standaard en het enige oppervlak dat er is;theme, een vanlight,darkofauto;locale, de taal van de eigen woorden van het frame, die anders de leerling volgt;title, de toegankelijke naam van het frame.
De styling houdt op bij het thema. Je pagina kan niet in het frame reiken, en het thema is de enige instelling die het biedt.
Het tokens geven
Stel de tokenProvider van het element in op een functie die je eigen server om een token vraagt. Je server geeft het uit met de origin van de pagina, met een serverkit, en antwoordt met het token en de vervaltijd. Het element geeft het token via een bericht aan het frame, en het reist nooit in een URL.
Registreer elke origin waarop de widget draait voordat je er een token voor uitgeeft, in de instellingen van je client in de console. De pagina Serverkits legt uit hoe. De API weigert een token dat voor een andere origin is uitgegeven, en het frame toont dan een fout in plaats van de oefening.
Een serverkit kan ook het hele fragment voor je schrijven, element en tokenprovider samen, met de script-nonce van je pagina als je content security policy er een vereist. Het laatste voorbeeld hieronder laat het zien.
Luisteren naar wat het frame zegt
Het frame praat met het element via een geversioneerd berichtenprotocol, en het element maakt van wat je pagina nodig heeft DOM-events:
lingara:practice-completedwanneer de leerling een set afrondt, met deplanId,setNumber,correctentotal;lingara:errorwanneer het frame stopt, met eencodeenretryable. Een herhaalbare fout betekent dat een nieuwe plaatsing kan slagen; wanneer je het opnieuw probeert, bepaal je zelf.
Het resultaat van de oefening bereikt ook je server, zoals beschreven in oefenresultaten.
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)
})