المستندات خارج الشاشة في إصدار Manifest V3

Ian Stanion
Ian Stanion

لاستبدال الوظائف في عملية الانتقال من صفحات الخلفية إلى خدمات إضافة الخدمة، يمكن للمطوّرين استخدام واجهة برمجة التطبيقات chrome.offscreen وإذن البيان اعتبارًا من الإصدار 109 من Chrome. يؤدي طلب هذا الإذن إلى إنشاء مستندات خارج الشاشة لاستخدام واجهات برمجة التطبيقات DOM بدون فتح نوافذ أو علامات تبويب جديدة بشكل مزعج يقاطع تجربة المستخدم. تتوفّر واجهة برمجة التطبيقات chrome.offscreen الآن في إضافات Chrome.

في Chromium، تستند إضافات Manifest V3 إلى مهام الخدمة، ولكن مهام الخدمة لا توفّر دعمًا لواجهات برمجة التطبيقات والآليات نفسها التي توفّرها الصفحات المستندة إلى المستندات الكاملة (التي تتضمّن صفحات الخلفية والأحداث). بالإضافة إلى ذلك، يؤدي استخدام نصوص برمجة المحتوى للوصول إلى واجهات برمجة تطبيقات DOM على صفحات الويب إلى جعل الإضافة تحت رحمة سياسات أمان المحتوى المختلفة على أساس كل صفحة. للمساعدة في حلّ هذه المشكلة، نقدّم لك ميزة "المستندات التي لا تظهر على الشاشة" لتتوافق مع الميزات وواجهات برمجة التطبيقات ذات الصلة بـ DOM من خلال السماح لإضافات Manifest V3 بفتح مستندات لا تظهر على الشاشة بحدّ أدنى وضمن نطاق معيّن وبدون أذونات نسبيًا أثناء التشغيل من خلال واجهة برمجة تطبيقات مخصّصة.

معلومات الميزة

بما أنّ المستندات بلا شاشة مصمّمة خصيصًا للتعامل مع حالات الاستخدام غير المتوافقة مع مهام الخدمة (مثل تشغيل الصوت)، فإنّ مدة صلاحية هذه الصفحة والأذونات التي سيتم منحها لها تكون منفصلة عن مدة صلاحية مهام خدمة الإضافة. ستتضمّن الصفحة آلية مدة صلاحية مشابهة لصفحات الأحداث في الإصدار 2 من البيان، وذلك من خلال إيقافها عندما تتوقّف عن تنفيذ الإجراءات. بالإضافة إلى ذلك، قد يفرض وكيل المستخدم قيودًا إضافية على مدة الصلاحية الخاصة بالغرض المحدّد. تم تصميم المستندات التي لا تظهر على الشاشة لملء الفجوات في واجهات برمجة التطبيقات التي لا يمكن الوصول إليها إلا من خلال واجهات برمجة التطبيقات لعناصر DOM. ولهذا السبب، لا يلزم عرض واجهات برمجة التطبيقات الإضافية مباشرةً في هذا السياق. لتقليل احتمالية استخدام الإضافات لهذه العناصر كـ "بديل للصفحة في الخلفية"، لا يتم عرض سوى واجهات برمجة تطبيقات خدمة المراسلة في chrome.runtime للمستند الذي لا يظهر على الشاشة. (يمكن للمطوّرين أيضًا استخدام المراسلة على الويب من خلال المطالبة بالمستند الذي لا يظهر على الشاشة كـ عميل من خلال عامل الخدمة). وبما أنّ بعض حالات الاستخدام، ولا سيما استخلاص البيانات من المواقع الإلكترونية، تتطلّب الوصول إلى إطارات من مصادر مختلفة، نسمح لهذه المستندات بتضمين إطارات من مصادر مختلفة وفقًا للقواعد نفسها التي تفرضها صفحات الإضافات حاليًا. في المستندات التي لا تظهر على الشاشة، يمكن تشغيل نصوص المحتوى البرمجية التي تحدّدها الإضافة في هذه الإطارات من أجل استخراج أي محتوى ضروري، كما هو الحال مع أي صفحة ويب عادية.

الأسباب، وضرورة تحديد الغرض

يتطلب إنشاء مستند خارج الشاشة أسبابًا مذكورة ومزيدًا من التبرير. يتم إدراج هذه الأسباب في مستندات مرجعية لواجهة برمجة التطبيقات، وتتعامل مع مدة صلاحية المستند بطرق مختلفة. على سبيل المثال، يتم حاليًا تطبيق قواعد مختلفة على مدة صلاحية المستند الذي تم فتحه لتشغيل الصوت مقارنةً بالمستند الذي تم فتحه لإدارة الحافظة. يمكنك أيضًا إضافة مزيد من التفاصيل حول الغرض من المستند الذي لا يظهر على الشاشة في حقل التبرير، وهو سلسلة يكتبها المطوّر، وليس مَعلمة لها تأثيرات على المستند. وقد تتم إضافة أسباب أخرى إلى واجهة برمجة التطبيقات بمرور الوقت عندما يشارك المطوّرون ملاحظاتهم وحالات الاستخدام.

الإبحار في المستقبل

لتسهيل التنفيذ، لا يتيح الإصدار الأول من واجهة برمجة التطبيقات هذه سوى صفحة واحدة لكل إضافة ولكل ملف شخصي في كل مرة. في الإصدارات المستقبلية، قد نسمح بإضافة صفحات متعددة. في الوقت الحالي، إذا كانت الإضافة تعمل في وضع التقسيم مع ملف شخصي نشط للتصفّح المتخفي، يمكن أن يتضمّن كل من الملف الشخصي العادي وملف التصفّح المتخفي مستندًا واحدًا خارج الشاشة. من المخطّط أيضًا منح وظائف DOM لعامل الإضافة في وقت لاحق. يمكنك إتاحة استخدام إضافاتك في المستقبل من خلال إقران الدوال التي تستخدم واجهة برمجة التطبيقات لعرض الإعلانات بلا إنترنت بدالة مماثلة مُعلَق عليها تعليقات في الخدمة العاملة للتبديل في وقت لاحق.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

بالإضافة إلى ذلك، عند إضافة وظائف DOM وواجهات برمجة التطبيقات إلى الخدمة العاملة، ستتم إضافة الأسباب لإنشاء مستند أو تقليلها استنادًا إلى الحالة الحالية للخدمة العاملة، وأسباب استخدام المستندات التي لا تظهر على الشاشة.

الخاتمة

تسمح ميزة "المستندات التي لا تظهر على الشاشة" بتشغيل الإضافات التي تتطلّب الوصول إلى DOM أو التفاعل مع النافذة، وهو ما لا يمكن تحقيقه في مهام الخدمة حاليًا. ويقدّم أيضًا نهجًا مرنًا، حيث يمكن إضافة حالات استخدام جديدة وإزالة حالات الاستخدام التي تم حلّها في المستقبل. يجب أن تستخدم الإضافات واجهة برمجة التطبيقات المقترَحة للمستندات التي لا تظهر على الشاشة في حالات استخدام معيّنة، ويجب أن يظلّ السياق الأساسي للإضافة في الخلفية هو الخدمة العاملة المحدّدة في البيان. يجب ألا يكون المستند الذي لا يظهر على الشاشة هو المكان الذي يتم فيه تخزين منطق الإضافة الأساسي لأنّه يملك إذن وصول محدودًا إلى واجهة برمجة التطبيقات. لا يرتبط عمر المستند الذي لا يظهر على الشاشة بخدمة Worker التي أنشأته. ستتضمّن إحدى المشاركات في المدونة منفصلة اعتبارات حول مدة عمل موظّف الخدمة وحالات الاستخدام ذات الصلة بهذه المدة في الإضافات. ستتباين أسباب استخدام المستندات التي لا تظهر على الشاشة بمرور الوقت مع إضافة الميزات وواجهات برمجة التطبيقات إلى الخدمة العاملة نفسها. يهمّنا معرفة ملاحظات المطوّرين أثناء تنفيذ هذه الخطوة.

صورة كاري شيا على Unsplash