Wijeti ya tovuti
Ukurasa huu umetafsiriwa kutoka Kiingereza. Ikiwa hizi mbili zinatofautiana, ukurasa wa Kiingereza ndio sahihi. Soma ukurasa wa Kiingereza
Kwenye tovuti, Lingara huendeshwa kama kipengele maalum (custom element), <lingara-embed>. Kipengele huchora mazoezi ya Lingara ndani ya fremu inayotolewa na Lingara, kwa hivyo ukurasa wako hauoni kamwe data ya mwanafunzi na ukurasa wa Lingara hauoni kamwe data yako.
Weka kipengele
Sakinisha @lingara/embed kutoka npm, au pakia toleo lake la moduli kutoka CDN ikiwa tovuti yako haina bundler. Kisha weka <lingara-embed> kwenye ukurasa na ukifafanue. Kipengele huchukua:
plan-id, mpango wa somo wa kufanyia mazoezi, ambao mchezaji anaumiliki;surface, kile cha kuonyesha:practice, chaguo-msingi na uso pekee uliopo;theme, mojawapo yalight,darkauauto;locale, lugha ya maneno ya fremu yenyewe, ambayo vinginevyo hufuata mwanafunzi;title, jina linalofikika la fremu.
Upambaji unaishia kwenye mandhari. Ukurasa wako hauwezi kufikia ndani ya fremu, na mandhari ndiyo mpangilio pekee inayotoa.
Kipe tokeni
Weka tokenProvider ya kipengele kuwa kitendakazi kinachoomba tokeni kutoka kwa seva yako mwenyewe. Seva yako huitengeneza kwa asili (origin) ya ukurasa, ikitumia kifurushi cha seva, na hujibu kwa tokeni na muda wake wa kuisha. Kipengele hukabidhi tokeni kwa fremu kwa ujumbe, na haisafiri kamwe ndani ya URL.
Sajili kila asili ambayo wijeti inaendeshwa juu yake kabla ya kutengeneza tokeni kwa ajili yake, katika mipangilio ya mteja wako kwenye dashibodi. Ukurasa wa vifurushi vya seva unaeleza jinsi. API hukataa tokeni iliyotengenezwa kwa asili nyingine yoyote, na fremu huonyesha hitilafu badala ya mazoezi.
Kifurushi cha seva kinaweza pia kukuandikia kipande kizima cha msimbo, kipengele na mtoa tokeni pamoja, kikiwa na script nonce ya ukurasa wako ikiwa sera yako ya usalama wa maudhui inaihitaji. Mfano wa mwisho hapa chini unaonyesha hilo.
Sikiliza kile fremu inasema
Fremu huzungumza na kipengele kupitia itifaki ya ujumbe yenye matoleo, na kipengele hugeuza kile ambacho ukurasa wako unahitaji kuwa matukio ya DOM:
lingara:practice-completedmwanafunzi anapokamilisha seti, pamoja naplanId,setNumber,correctnatotalzake;lingara:errorfremu inaposimama, pamoja nacodenaretryable. Hitilafu inayoweza kujaribiwa upya inamaanisha kwamba kuweka kipengele upya kunaweza kufaulu; ni juu yako kuamua lini ujaribu tena.
Matokeo ya mazoezi hufika kwenye seva yako pia, kama inavyoelezwa katika matokeo ya mazoezi.
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)
})