الميزات الجديدة في Chrome 116 للإضافات

يتوفّر الإصدار 116 من Chrome الآن في إصدار تجريبي ويتضمّن العديد من التعديلات المثيرة للمطوّرين الذين يستخدمون إضافات Chrome. لنلقِ نظرة سريعة على الميزات الجديدة.

فتح لوحة جانبية آليًا

لطالما كانت اللوحة الجانبية من الميزات الأكثر طلبًا في إضافات Chrome، وقد أصبحت متاحة في Chrome منذ الإصدار 114. بعد إطلاق Side Panel API، كانت إحدى الملاحظات الأولى التي تلقّيناها هي أنّ المطوّرين يريدون طريقة لفتح لوحة جانبية آليًا. يسرّنا الإعلان عن توفّر chrome.sidePanel.open الآن في إصدار تجريبي. يمكنك استخدامها لفتح اللوحة الجانبية للإضافات آليًا استجابةً لتفاعل المستخدم، مثل النقر على قائمة سياق:

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === 'openSidePanel') {
    // This will open the panel in all the pages on the current window.
    chrome.sidePanel.open({ windowId: tab.windowId });
  }
});

إتاحة WebSocket في مهام الخدمة

إنّ إتاحة بروتوكول WebSocket أمر مهم للعديد من الإضافات التي تخطط للانتقال إلى الإصدار Manifest V3. يُحسِّن الإصدار 116 من Chrome إمكانات استخدام WebSocket في مهام الخدمة، لأنّ جميع أنشطة WebSocket ستعيد ضبط موقّت وقت التوقف في مهام الخدمة الذي يبلغ 30 ثانية. وهذا يعني أنّه طالما أنّ WebSocket نشط، سيظلّ Worker في الخدمة.

يمكنك استخدام هذا الإجراء لتنفيذ آلية keepalive لضمان بقاء عامل الخدمة نشطًا أثناء انتظار الرسائل من الخادم، حتى إذا استغرق وصول الرسالة التالية أكثر من 30 ثانية:

function keepAlive() {
  const keepAliveIntervalId = setInterval(
    () => {
      if (webSocket) {
        webSocket.send('keepalive');
      } else {
        clearInterval(keepAliveIntervalId);
      }
    },
    // It's important to pick an interval that's shorter than 30s, to
    // avoid that the service worker becomes inactive.
    20 * 1000
  );
}

اطّلِع على الدليل والنموذج الجديدَين لواجهة WebSocket للحصول على مزيد من التفاصيل.

ميزة "إبقاء الاتصال مفتوحًا" قوية لمشغّلي الخدمات

في ما يتعلّق بدورة حياة الخدمة، تم طرح تحديث مهم آخر: ميزة "إبقاء الاتصال مفتوحًا" القوية لواجهات برمجة التطبيقات التي تتطلّب تفاعل المستخدم. ستتضمّن واجهات برمجة التطبيقات التي تتطلّب تفاعل المستخدم عمليات حفظ اتصال "قوية" لعمال خدمة الإضافات (أي السماح للعامل بقضاء وقت أطول من 5 دقائق في تنفيذ هذه المهمة):

تسجيل الصوت والفيديو في الخلفية

تم حلّ مشكلة أخرى بين الإصدار 2 من ملف البيان والإصدار 3 منه: يمكنك تسجيل الصوت والفيديو في الخلفية باستخدام tabCapture والمستندات التي لا تظهر على الشاشة. استخدِم واجهة برمجة التطبيقات chrome.tabCapture في عامل خدمة للحصول على معرّف البث بعد إشارة المستخدم. ويمكن بعد ذلك نقل هذا المحتوى إلى مستند خارج الشاشة لبدء التسجيل.

اطّلِع على دليل tabCapture المعدَّل للتعرّف على آلية عمل هذه الميزة، أو اطّلِع على نموذج Tab Capture - Recorder للحصول على مثال عملي.

واجهة برمجة تطبيقات جديدة: runtime.getContexts()

تتيح لك واجهة برمجة التطبيقات الجديدة runtime.getContexts() API جلب معلومات عن السياقات النشطة المرتبطة بإضافاتك. على سبيل المثال، يمكنك استخدامه للتحقّق مما إذا كان هناك مستند نشط خارج الشاشة:

const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
    (c) => c.contextType === 'OFFSCREEN_DOCUMENT'
  );

سبب جديد للظهور بلا شاشة: الموقع الجغرافي

تمت إضافة geolocation كسبب صالح آخر لاستخدام مستند خارج الشاشة. اطّلِع على دليلنا استخدام الموقع الجغرافي لمعرفة المزيد من المعلومات عن كيفية الحصول على الموقع الجغرافي للإضافات باستخدام Offscreen API.

chrome.action.setBadgeText()

تم تعديل action.setBadgeText لمعالجة عدم الاتساق بين الإصدارين Manifest V2 وManifest V3. سيؤدي تمرير سلسلة فارغة أو null إلى action.setBadgeText إلى محو نص الشارة للعلامة المحدّدة والرجوع تلقائيًا إلى نص الشارة الشاملة بدلاً من ذلك.

action.setBadgeText({tabId: tabId, text: ''});

الملخّص: خطوة أخرى نحو استخدام الإصدار 3 من ملف البيان

من خلال التحسينات التي أجريناها على Service Worker وTabCapture API، واصلنا تحقيق هدفنا المتمثل في سد الفجوة بين الإصدارَين 2 و3 من Manifest. يمكنك الاطّلاع على صفحة المشاكل المعروفة لمعرفة الحالة الحالية.