chrome.offscreen

الوصف

استخدِم واجهة برمجة التطبيقات offscreen لإنشاء مستندات خارج الشاشة وإدارتها.

الأذونات

offscreen

لاستخدام Offscreen API، يجب الإفصاح عن إذن "offscreen" في بيان الإضافة. على سبيل المثال:

{
  "name": "My extension",
  ...
  "permissions": [
    "offscreen"
  ],
  ...
}

مدى التوفّر

‫Chrome 109 أو الإصدارات الأحدث الإصدار 3 أو الإصدارات الأحدث من بيان التطبيق

المفاهيم والاستخدام

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

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

في ما يلي طرق أخرى يختلف بها سلوك المستندات خارج الشاشة عن الصفحات العادية:

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

استخدِم chrome.offscreen.createDocument() وchrome.offscreen.closeDocument() لإنشاء مستند خارج الشاشة وإغلاقه. يتطلّب createDocument() url المستند وسببًا ومبررًا:

chrome.offscreen.createDocument({
  url: 'off_screen.html',
  reasons: ['CLIPBOARD'],
  justification: 'reason for needing the document',
});

الأسباب

للاطّلاع على قائمة بالأسباب الصالحة، راجِع قسم الأسباب. يتم تحديد الأسباب أثناء إنشاء المستند لتحديد مدة صلاحيته. يؤدي السبب AUDIO_PLAYBACK إلى إغلاق المستند بعد 30 ثانية بدون تشغيل الصوت. لا تفرض جميع الأسباب الأخرى حدودًا على مدة الإقامة.

أمثلة

الحفاظ على مراحل نشاط مستند خارج الشاشة

يوضّح المثال التالي كيفية التأكّد من توفّر مستند خارج الشاشة. تستدعي الدالة setupOffscreenDocument() الدالة runtime.getContexts() للعثور على مستند غير معروض على الشاشة، أو تنشئ المستند إذا لم يكن متوفّرًا.

let creating; // A global promise to avoid concurrency issues
async function setupOffscreenDocument(path) {
  // Check all windows controlled by the service worker to see if one
  // of them is the offscreen document with the given path
  const offscreenUrl = chrome.runtime.getURL(path);
  const existingContexts = await chrome.runtime.getContexts({
    contextTypes: ['OFFSCREEN_DOCUMENT'],
    documentUrls: [offscreenUrl]
  });

  if (existingContexts.length > 0) {
    return;
  }

  // create offscreen document
  if (creating) {
    await creating;
  } else {
    creating = chrome.offscreen.createDocument({
      url: path,
      reasons: ['CLIPBOARD'],
      justification: 'reason for needing the document',
    });
    await creating;
    creating = null;
  }
}

قبل إرسال رسالة إلى مستند غير معروض على الشاشة، اتّصِل بالدالة setupOffscreenDocument() للتأكّد من توفّر المستند، كما هو موضّح في المثال التالي.

chrome.action.onClicked.addListener(async () => {
  await setupOffscreenDocument('off_screen.html');

  // Send message to offscreen document
  chrome.runtime.sendMessage({
    type: '...',
    target: 'offscreen',
    data: '...'
  });
});

للاطّلاع على أمثلة كاملة، راجِع العرضَين التوضيحيَين offscreen-clipboard وoffscreen-dom على GitHub.

قبل الإصدار 116 من Chrome: التحقّق مما إذا كان مستند خارج الشاشة مفتوحًا

تمت إضافة runtime.getContexts() في الإصدار 116 من Chrome. في الإصدارات السابقة من Chrome، استخدِم clients.matchAll() للتحقّق من وجود مستند خارج الشاشة:

async function hasOffscreenDocument() {
  if ('getContexts' in chrome.runtime) {
    const contexts = await chrome.runtime.getContexts({
      contextTypes: ['OFFSCREEN_DOCUMENT'],
      documentUrls: [OFFSCREEN_DOCUMENT_PATH]
    });
    return Boolean(contexts.length);
  } else {
    const matchedClients = await clients.matchAll();
    return matchedClients.some(client => {
      return client.url.includes(chrome.runtime.id);
    });
  }
}

الأنواع

CreateParameters

الخصائص

  • التبرير

    سلسلة

    سلسلة يقدّمها المطوّر وتوضّح بالتفصيل الحاجة إلى سياق الخلفية. _قد_ يستخدم برنامج وكيل المستخدم هذا في العرض للمستخدم.

  • سبب

    الأسباب التي تدفع الإضافة إلى إنشاء مستند خارج الشاشة

  • url

    سلسلة

    عنوان URL (النسبي) الذي سيتم تحميله في المستند

Reason

Enum

"اختبار"
سبب يُستخدم لأغراض الاختبار فقط.

‫"AUDIO_PLAYBACK"
تحدّد هذه السمة أنّ المستند خارج الشاشة مسؤول عن تشغيل الصوت.

‫"IFRAME_SCRIPTING"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى تضمين إطار iframe وكتابة نص برمجي له من أجل تعديل محتوى الإطار.

‫"DOM_SCRAPING"
تحدّد هذه القيمة أنّ المستند خارج الشاشة يحتاج إلى تضمين إطار iframe وتحليل DOM لاستخراج المعلومات.

‫"BLOBS"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى التفاعل مع عناصر Blob (بما في ذلك URL.createObjectURL()).

‫"DOM_PARSER"
تحدّد هذه السمة أنّ المستند خارج الشاشة يجب أن يستخدم DOMParser API.

‫"USER_MEDIA"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى التفاعل مع بث الوسائط من وسائط المستخدم (مثل getUserMedia()).

تحدّد السمة"DISPLAY_MEDIA"
أنّ المستند خارج الشاشة يحتاج إلى التفاعل مع وسائط البث من وسائط العرض (مثل getDisplayMedia()).

‫"WEB_RTC"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى استخدام واجهات برمجة تطبيقات WebRTC.

‫"CLIPBOARD"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى التفاعل مع واجهة برمجة التطبيقات الخاصة بالحافظة.

‫"LOCAL_STORAGE"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى إذن الوصول إلى localStorage.

‫"WORKERS"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى إنشاء عوامل.

‫"BATTERY_STATUS"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى استخدام navigator.getBattery.

‫"MATCH_MEDIA"
يحدّد هذا النوع أنّ المستند خارج الشاشة يحتاج إلى استخدام window.matchMedia.

‫"GEOLOCATION"
تحدّد هذه السمة أنّ المستند خارج الشاشة يحتاج إلى استخدام navigator.geolocation.

الطُرق

closeDocument()

chrome.offscreen.closeDocument(): Promise<void>

تُغلِق هذه الدالة المستند المفتوح حاليًا خارج الشاشة للإضافة.

المرتجعات

  • Promise<void>

createDocument()

chrome.offscreen.createDocument(
  parameters: CreateParameters,
)
: Promise<void>

تنشئ هذه الدالة مستندًا جديدًا خارج الشاشة للإضافة.

المعلمات

  • المعلمات

    المَعلمات التي تصف المستند خارج الشاشة المطلوب إنشاؤه

المرتجعات

  • Promise<void>