HTML Academy · درس

تسجيل Service Worker من HTML

تسجيل Service Worker باستخدام وسم script وواجهة navigator

الدرس 2 من 414 خطوة

تسجيل Service Worker من HTML درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.

ما هو Service Worker

Service Worker هو ملف JavaScript يعمل في الخلفية بمعزل عن أي صفحة، ويعترض طلبات الشبكة ضمن النطاق الخاص به. وهو يوفّر دعم العمل دون اتصال، والإشعارات الفورية، والمزامنة في الخلفية، وتسريع عمليات التحميل المتكررة من خلال التخزين المؤقت.

التسجيل

سجّل Service Worker من خلال نص الصفحة باستخدام: navigator.serviceWorker.register("/sw.js"). يجلب المتصفح الملف /sw.js ويحلله، ثم يشغّل حدث التثبيت فيه ويبدأ باعتراض الطلبات ضمن نطاق التسجيل.

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js")
    .then((reg) => console.log("Registered, scope:", reg.scope))
    .catch((err) => console.error("Registration failed:", err));
}

اكتشاف الميزة أولًا

لا تدعم المتصفحات القديمة Service Worker. تحقّق دائمًا من توفر الميزة باستخدام "serviceWorker" in navigator قبل استدعاء register، وإلا فسيؤدي الاستدعاء إلى ظهور خطأ في المتصفحات التي تفتقد الواجهة البرمجية. ولا يُعد استخدام polyfill عمليًا، لأن Service Worker يتطلب تكاملًا على مستوى المتصفح.

النطاق

النطاق هو بادئة المسار التي يتحكم بها Service Worker. ويكون النطاق افتراضيًا هو مجلد ملف العامل: إذ يتحكم /sw.js في جميع عناوين URL الموجودة ضمن /. ولتسجيل عامل ذي نطاق أعمق من موقع ملف مختلف، حدّد خيار scope، وقدّم أيضًا الترويسة Service-Worker-Allowed.

مكان وضع sw.js

ضع sw.js في جذر التطبيق (/sw.js) حتى يغطي نطاقه الافتراضي الموقع بأكمله. أما المسارات الأعمق، مثل /app/sw.js، فتحصر النطاق في /app/ وما تحته، وهو أمر نادرًا ما تريده.

توقيت التسجيل

سجّل Service Worker بعد تحميل الصفحة لتجنب منافسته على النطاق الترددي أثناء العرض الأساسي: window.addEventListener("load", () => navigator.serviceWorker.register("/sw.js")). وتبدأ ميزات PWA بالعمل في الزيارات اللاحقة دون تأخير الزيارة الأولى.

التحديثات

يتحقق المتصفح تلقائيًا من وجود نسخة محدثة من sw.js، عادةً كل 24 ساعة وعند معظم عمليات تحميل الصفحات. إذا تغير محتوى الملف، يُنزّل العامل الجديد ويُثبّت، ثم ينتظر في حالة "waiting" حتى تُغلق جميع علامات التبويب الموجودة، وبعدها يُفعّل.

فرض التحديثات

يؤدي registration.update() إلى تشغيل عملية تحقق من التحديث يدويًا. ويؤدي self.skipWaiting() داخل ملف sw.js الجديد إلى تفعيله فورًا دون انتظار إغلاق علامات التبويب. اجمع بينهما للحصول على سلوك «تشغيل أحدث عامل دائمًا»، مع احتمال إعادة جلب الموارد أثناء الجلسة.

إلغاء التسجيل

يزيل registration.unregister() العامل. ويفيد ذلك أثناء التطوير إذا كان عامل معطوب يتسبب في مشكلات لموقعك. وفي Chrome DevTools، توفّر Application → Service Workers زر "Unregister" للغرض نفسه أثناء تصحيح الأخطاء.

خطأ شائع

يفشل تسجيل العامل بصمت عند استخدام HTTP دون HTTPS، لأن Service Worker يتطلب أصلًا آمنًا، مثل HTTPS أو localhost أثناء التطوير. تحقّق من وحدة التحكم بحثًا عن الرسالة "An SSL certificate error occurred" إذا لم يبدأ التسجيل بالعمل.

تنسيق العمل بين العامل والصفحة

لا يمكن للعامل الوصول إلى DOM. ولتمرير الرسائل، استخدم navigator.serviceWorker.controller.postMessage() من الصفحة، واستخدم self.addEventListener("message", handler) في العامل، والعكس صحيح. ويفيد ذلك في إبطال التخزين المؤقت، والتحقق من الإصدارات، وإنشاء الأحداث المخصّصة.

الزيارة الأولى مقابل الزيارات المتكررة

في الزيارة الأولى، يُثبّت العامل ولا يبدأ بالتحكم في الصفحات إلا بعد إعادة تحميل الصفحة. وللتحكم في عملية التصفح الأولى فورًا، استدعِ self.clients.claim() في حدث activate، وهو أمر مفيد للتطبيقات التي تعتمد أسلوب العمل دون اتصال أولًا.

اختبار المعرفة

لماذا يجب تقديم Service Worker عبر HTTPS أو localhost؟

ملخص

سجّل Service Worker من JavaScript الخاص بالصفحة باستخدام navigator.serviceWorker.register("/sw.js") بعد التحقق من توفر الميزة. ضع sw.js في جذر التطبيق للحصول على نطاق كامل. ونفّذ التسجيل عند التحميل لتجنب منافسة العرض الأساسي على الموارد. تتحقق المتصفحات تلقائيًا من التحديثات دوريًا؛ ويمكن فرضها باستخدام registration.update أو skipWaiting. ويتطلب ذلك HTTPS لمنع حقن عامل ضار.

البدء مجانًا

تعلم HTML مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
40
الدروس
159

الأسئلة الشائعة

هل درس «تسجيل Service Worker من HTML» مجاني؟

نعم — نص درس «تسجيل Service Worker من HTML» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.

ماذا ستتعلم في «تسجيل Service Worker من HTML»؟

تسجيل Service Worker باستخدام وسم script وواجهة navigator تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟

لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تسجيل Service Worker من HTML»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟

نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Web App Manifest
  2. تسجيل Service Worker من HTML
  3. لون السمة وأيقونات التطبيق
  4. صفحة بديلة للعمل دون اتصال
← العودة إلى HTML Academy