إضافات MV3 تعتمد على الرسائل بين service worker و content scripts و popups وربما page context. Error مثل Receiving end does not exist لا يقول وحده إن extension معطلة. قد يكون tab انتقل قبل وصول الرسالة أو frame مختلفًا أو script لم يطابق URL. تصميم protocol صغير و logging منظم يجعل الفشل قابلًا للتشخيص.
اعطِ كل رسالة Type و Call ID
لا ترسل objects بلا type واضح. استخدم requestId لربط send بال response، و version إذا protocol يتطور. لا تستخدم action string يسمح بأي method ديناميكي.
تحقق من Sender
في background handler راجع tabId/frameId/url أو extension origin حسب الحاجة قبل action حساس. محتوى الصفحة لا يجب أن يختار Profile ID أو resource خارج scope بلا تحقق.
فرق No Receiver عن Timeout
No receiver قد يعني content script غير موجود. Timeout يعني receiver لم يرد في المهلة. سجّل code مختلفة لتقرر هل inject/reload أو تعيد المحاولة.
تعامل مع Navigation Race
Tab يمكن أن تنتقل بعد اختيارها وقبل وصول message. اقرأ URL/version الحالية أو documentId إن API تدعم. إذا تغير السياق، ألغ action بدل إرساله للصفحة الجديدة.
خطوات عملية
- Capture target context.
- Send.
- Verify receiver context.
- Accept result فقط إذا ما زال مناسبًا.
صمم Async Results
عملية طويلة لا يجب أن تبقي popup مفتوحة كشرط. background تنشئ taskId وتخزن progress، وال UI تعيد الاتصال وتقرأ status.
سجل Minimal Payload
Log type و callId و sender metadata و duration/error، لا body التي قد تحتوي نص صفحة أو secrets. Redact قبل persistence.
اختبر Worker Restart
أرسل task، اسمح لل service worker أن تتوقف، ثم افتح UI من جديد. state المهمة يجب أن تكون قابلة للاسترجاع إذا كانت مصممة للاستمرار.
اختبر الإضافة داخل دورة الحياة كاملة
عند التعامل مع «Message Passing بين Extension والصفحة: نقاط فشل تحتاج Logging» لا تكتفِ بتثبيت الإضافة وفتح popup. اختبر التثبيت والترقية وإعادة تشغيل المتصفح وتعليق service worker وإزالته، ثم تأكد من تنظيف listeners والتخزين الذي لم يعد مطلوبًا. شغّل السيناريو داخل بروفايلين للتأكد أن الحالة لا تتسرب بينهما، وجرب رفض permission ثم منحها ثم سحبها. إذا كانت هناك content scripts، راقب توقيت الحقن عند navigation و SPA transitions. بهذه المجموعة تظهر مشاكل لا تراها تجربة يدوية قصيرة بعد التثبيت مباشرة.
قائمة مراجعة
- Install / Upgrade / Remove.
- رفض ومنح وسحب Permission.
- اختبار بروفايلين مستقلين.
- Navigation و SPA transitions.
معيار القبول قبل الإغلاق
اختبر أثر الترقية وليس التثبيت النظيف فقط. احتفظ ببروفايل على النسخة السابقة ثم حدث الإضافة وراجع storage migrations وال permissions وال background lifecycle. أي warning جديد في console أو extension errors يجب تصنيفه قبل التعميم على كل البروفايلات.
قائمة مراجعة
- نتيجة قابلة لإعادة الاختبار.
- سبب موثق لا مجرد اختفاء العرض.
- Regression test بعد الإصلاح.
حالة فشل يجب اختبارها
في «Message Passing بين Extension والصفحة: نقاط فشل تحتاج Logging» جرّب صفحة لا تطابق نطاق الإضافة ثم صفحة تطابقه جزئيًا. تأكد أن content script وال ـhost permissions لا تتوسع بسبب wildcard أوسع من الحاجة، وأن تعطيل الإضافة يوقف listeners والرسائل فورًا. هذه الاختبارات تكشف حدود النطاق أكثر من مجرد التأكد أن الميزة تعمل.
توثيق النتيجة للفريق
بعد الانتهاء من اختبار «Message Passing بين Extension والصفحة: نقاط فشل تحتاج Logging»، احفظ ملخصًا قصيرًا يوضح البيئة والخطوات والنتيجة وما الذي تغير عن ال ـbaseline. أرفق أكواد الأخطاء أو المقاييس الضرورية فقط، واربطها برقم الإصدار. هذا السجل يجعل المراجعة اللاحقة أسرع ويمنع إعادة نفس النقاش من الصفر، كما يسمح لفريق آخر بتكرار التجربة دون الاعتماد على ذاكرة الشخص الذي نفذها. إذا كانت النتيجة غير حاسمة، اكتب ذلك صراحة وحدد الاختبار التالي بدل تحويل الاحتمال إلى استنتاج نهائي.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…