Web sitesi widget'ı
Bu sayfa İngilizceden çevrilmiştir. İkisi arasında fark varsa İngilizce sayfa doğrudur. İngilizce sayfayı oku
Bir web sitesinde Lingara, <lingara-embed> adlı özel bir öğe olarak çalışır. Öğe, Lingara’nın alıştırmasını Lingara tarafından sunulan bir çerçevede çizer; böylece sayfanız öğrencinin verilerini hiçbir zaman görmez, Lingara’nın sayfası da sizinkini hiçbir zaman görmez.
Öğeyi yerleştirin
@lingara/embed paketini npm’den kurun ya da sitenizde bir paketleyici yoksa modül derlemesini bir CDN’den yükleyin. Ardından <lingara-embed> öğesini sayfaya koyun ve tanımlayın. Öğe şunları alır:
plan-id, alıştırması yapılacak ders planı; oyuncunun sahip olduğu bir plan;surface, ne gösterileceği:practice, varsayılan olan ve mevcut tek yüzey;theme,light,darkveyaautodeğerlerinden biri;locale, çerçevenin kendi sözcüklerinin dili; belirtilmezse öğrencinin dilini izler;title, çerçevenin erişilebilir adı.
Biçimlendirme temada biter. Sayfanız çerçevenin içine ulaşamaz ve tema, çerçevenin sunduğu tek ayardır.
Ona belirteç verin
Öğenin tokenProvider özelliğini, kendi sunucunuzdan belirteç isteyen bir işleve ayarlayın. Sunucunuz bir sunucu kiti kullanarak belirteci sayfanın kökeniyle üretir ve belirteci ve son kullanma zamanını yanıt olarak döndürür. Öğe belirteci çerçeveye mesajla iletir ve belirteç hiçbir zaman bir URL içinde dolaşmaz.
Widget’ın çalıştığı her kökeni, onun için belirteç üretmeden önce konsolda istemcinizin ayarlarına kaydedin. Sunucu kitleri sayfası nasıl yapılacağını anlatır. API, başka herhangi bir köken için üretilmiş bir belirteci reddeder ve çerçeve alıştırma yerine bir hata gösterir.
Bir sunucu kiti, öğe ve belirteç sağlayıcısı bir arada olmak üzere bütün kod parçacığını da sizin için yazabilir; içerik güvenlik politikanız gerektiriyorsa sayfanızın betik nonce değeriyle birlikte. Aşağıdaki son örnek bunu gösterir.
Çerçevenin söylediklerini dinleyin
Çerçeve öğeyle sürümlü bir mesaj protokolü üzerinden konuşur ve öğe, sayfanızın ihtiyaç duyduklarını DOM olaylarına dönüştürür:
- öğrenci bir seti bitirdiğinde
lingara:practice-completed;planId,setNumber,correctvetotalile birlikte; - çerçeve durduğunda
lingara:error; bircodeveretryableile birlikte. Yeniden denenebilir bir hata, yeni bir yerleştirmenin başarılı olabileceği anlamına gelir; ne zaman yeniden deneneceğine siz karar verirsiniz.
Alıştırmanın sonucu, alıştırma sonuçları sayfasında anlatıldığı gibi sunucunuza da ulaşır.
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)
})