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

Ian Stanion
Ian Stanion

لاستبدال الوظائف في عملية الانتقال من صفحات الخلفية إلى مشغِّلي خدمات الإضافات، يمكن للمطوّرين استخدام واجهة برمجة التطبيقات chrome.offscreen وإذن البيان بدءًا من Chrome 109. يتيح طلب هذا الإذن إنشاء مستندات خارج الشاشة لاستخدام واجهات برمجة تطبيقات DOM بدون فتح نوافذ أو علامات تبويب جديدة بشكل عشوائي والتي تقاطع تجربة المستخدم. تتوفّر واجهة برمجة التطبيقات chrome.offscreen API الآن في إضافات 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 والتي لا يمكن الحصول عليها في مشغّلي الخدمات في الوقت الحالي. وتوفِّر أيضًا منهجًا مرنًا، حيث يمكن إضافة حالات استخدام جديدة وإزالة حالات الاستخدام التي تم حلها في المستقبل. يجب أن تستخدم الإضافات واجهة برمجة التطبيقات المقترحة للمستند خارج الشاشة لحالات استخدام معيّنة، كما يجب أن يظل سياق الخلفية الأساسي للإضافة هو مشغّل الخدمة المحدّد في البيان. يجب ألا يكون المستند خارج الشاشة هو المكان المناسب لتخزين منطق الإضافة الأساسية لأنه يمكن الوصول إليها بشكل محدود من خلال واجهة برمجة التطبيقات. إنّ مدة صلاحية المستند خارج الشاشة مستقلّة عن مشغّل الخدمات الذي أنشأه. وستشمل مشاركة مدونة منفصلة الاعتبارات المتعلقة بعمر عامل الخدمة وحالات الاستخدام ذات الصلة بفترة عمل عامل الخدمة منذ البداية. وستتقلّب أسباب استخدام المستندات خارج الشاشة بمرور الوقت بسبب إضافة الميزات وواجهات برمجة التطبيقات إلى مشغّل الخدمة نفسه. ونحن حريصون على معرفة ملاحظات المطوّرين عند حدوث هذا الأمر.

تصوير كاري شي على UnLaunch