chrome.userScripts (original) (raw)

الوصف

استخدِم واجهة برمجة التطبيقات userScripts لتنفيذ نصوص برمجية للمستخدمين في سياق "نصوص برمجية للمستخدمين".

الأذونات

userScripts

لاستخدام User Scripts API، chrome.userScripts، أضِف الإذن "userScripts" إلى ملف manifest.json و"host_permissions" للمواقع الإلكترونية التي تريد تشغيل النصوص البرمجية عليها.

{
  "name": "User script test extension",
  "manifest_version": 3,
  "minimum_chrome_version": "120",
  "permissions": [
    "userScripts"
  ],
  "host_permissions": [
    "*://example.com/*"
  ]
}

مدى التوفّر

‫Chrome 120 أو الإصدارات الأحدثالإصدار 3 أو الإصدارات الأحدث من Manifest

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

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

تفعيل استخدام واجهة برمجة التطبيقات userScripts

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

استخدِم عملية التحقّق التالية لتحديد زر التبديل الذي يجب أن يفعّله المستخدم، على سبيل المثال، أثناء تعريف المستخدم الجديد بالمنتج:

let version = Number(navigator.userAgent.match(/(Chrome|Chromium)\/([0-9]+)/)?.[2]);
if (version >= 138) {
  // Allow User Scripts toggle will be used.
} else {
  // Developer mode toggle will be used.
}

توضّح الأقسام التالية مفاتيح التبديل المختلفة وكيفية تفعيلها.

إصدارات Chrome الأقدم من 138 (زر التبديل إلى وضع "مطوّر البرامج")

بصفتك مطوّر إضافات، من المفترض أن يكون وضع المطوّرين مفعَّلاً في إصدار Chrome الذي تستخدمه. على المستخدمين أيضًا تفعيل "وضع مطوّر البرامج".

يمكنك نسخ التعليمات التالية ولصقها في مستندات الإضافة لتوفيرها للمستخدمين

  1. انتقِل إلى صفحة "الإضافات" من خلال إدخال chrome://extensions في علامة تبويب جديدة. (لا يمكن ربط عناوين URL التي تبدأ بـ chrome://).
  2. فعِّل "وضع مطوّر البرامج" من خلال النقر على مفتاح التبديل بجانب وضع مطوّر البرامج.
    صفحة "إضافات Chrome" مع تمييز زر تفعيل "وضع المطوّر"
    صفحة "الإضافات" (chrome://extensions)

الإصدار 138 من Chrome والإصدارات الأحدث (زر التبديل "السماح ببرامج المستخدم النصية")

يكون مفتاح التبديل السماح ببرامج المستخدمين مفعَّلاً في صفحة تفاصيل كل إضافة (على سبيل المثال، chrome://extensions/?id=YOUR_EXTENSION_ID).

يمكنك نسخ التعليمات التالية ولصقها في مستندات الإضافة لتوفيرها للمستخدمين:

  1. انتقِل إلى صفحة "الإضافات" من خلال إدخال chrome://extensions في علامة تبويب جديدة. (لا يمكن ربط عناوين URL التي تبدأ بـ chrome://).
  2. انقر على الزر "التفاصيل" في بطاقة الإضافة لعرض معلومات مفصّلة عنها.
  3. انقر على مفتاح التبديل بجانب السماح ببرامج المستخدمين.

زر التبديل "السماح بالنصوص البرمجية الخاصة بالمستخدم" في صفحة تفاصيل الإضافة

زر التبديل "السماح بالنصوص البرمجية الخاصة بالمستخدم" (chrome://extensions/?id=abc...)

التحقّق من توفّر واجهة برمجة التطبيقات

ننصحك بإجراء عملية التحقّق التالية لتحديد ما إذا كانت واجهة برمجة التطبيقات userScripts مفعّلة، لأنّها تعمل في جميع إصدارات Chrome. يحاول هذا التحقّق طلب طريقة chrome.userScripts() التي من المفترض أن تنجح دائمًا عندما تكون واجهة برمجة التطبيقات متاحة. إذا أدى هذا الطلب إلى ظهور خطأ، يعني ذلك أنّ واجهة برمجة التطبيقات غير متاحة:

function isUserScriptsAvailable() {
  try {
    // Method call which throws if API permission or toggle is not enabled.
    chrome.userScripts.getScripts();
    return true;
  } catch {
    // Not available.
    return false;
  }
}

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

يمكن تشغيل كل من نصوص المستخدمين ونصوص المحتوى في بيئة معزولة أو في البيئة الرئيسية. العالم المعزول هو بيئة تنفيذ لا يمكن الوصول إليها من صفحة مضيفة أو إضافات أخرى. يتيح ذلك لبرنامج نصي للمستخدم تغيير بيئة JavaScript بدون التأثير في الصفحة المضيفة أو البرامج النصية للمستخدم والمحتوى الخاصة بالإضافات الأخرى. في المقابل، لا تكون نصوص المستخدم (ونصوص المحتوى) مرئية للصفحة المضيفة أو للمستخدم أو لنصوص المحتوى الخاصة بالإضافات الأخرى. يمكن للصفحات المضيفة والإضافات الأخرى الوصول إلى البرامج النصية التي يتم تشغيلها في العالم الرئيسي، كما يمكن للصفحات المضيفة والإضافات الأخرى رؤية هذه البرامج النصية. لاختيار العالم، مرِّر "USER_SCRIPT" أو "MAIN" عند الاتصال بـ userScripts.register().

لضبط سياسة أمان المحتوى في عالم USER_SCRIPT، اتّصِل بالرقم userScripts.configureWorld():

chrome.userScripts.configureWorld({
  csp: "script-src 'self'"
});

المراسلة

مثل نصوص المحتوى والمستندات خارج الشاشة، تتواصل نصوص المستخدمين مع أجزاء أخرى من الإضافة باستخدام الرسائل (ما يعني أنّه يمكنها استدعاء runtime.sendMessage() وruntime.connect() كما يفعل أي جزء آخر من الإضافة). ومع ذلك، يتم تلقّيها باستخدام معالجات أحداث مخصّصة (أي أنّها لا تستخدم onMessage أو onConnect). ويُطلق على هذه المعالجات اسم runtime.onUserScriptMessage وruntime.onUserScriptConnect. تسهّل المعالجات المخصّصة تحديد الرسائل من نصوص المستخدمين البرمجية، وهي سياق أقل موثوقية.

قبل إرسال رسالة، يجب طلب configureWorld() مع ضبط الوسيطة messaging على true. يُرجى العِلم أنّه يمكن تمرير كلّ من الوسيطتَين csp وmessaging في الوقت نفسه.

chrome.userScripts.configureWorld({
  messaging: true
});

تحديثات الإضافات

تتم إزالة نصوص البرامج الخاصة بالمستخدمين عند تحديث إحدى الإضافات. يمكنك إعادة إضافتها من خلال تنفيذ الرمز في معالج الأحداث runtime.onInstalled في عامل خدمة الإضافة. الردّ فقط على سبب "update" الرفض الذي تم تمريره إلى دالة معاودة الاتصال الخاصة بالحدث

مثال

هذا المثال مأخوذ من نموذج userScript في مستودع النماذج.

تسجيل نص برمجي

يعرض المثال التالي طلبًا أساسيًا إلى register(). الوسيطة الأولى هي مصفوفة من العناصر التي تحدد النصوص البرمجية المطلوب تسجيلها. تتوفّر خيارات أكثر من تلك المعروضة هنا.

chrome.userScripts.register([{
  id: 'test',
  matches: ['*://*/*'],
  js: [{code: 'alert("Hi!")'}]
}]);

الأنواع

ExecutionWorld

بيئة JavaScript التي يتم تنفيذ البرنامج النصي للمستخدم فيها

Enum

"MAIN"
تحدّد بيئة تنفيذ نموذج العناصر في المستند (DOM)، وهي بيئة التنفيذ المشتركة مع JavaScript في الصفحة المضيفة.

‫"USER_SCRIPT"
تحدّد بيئة التنفيذ الخاصة ببرامج المستخدم النصية والتي تكون معفاة من سياسة أمان المحتوى للصفحة.

InjectionResult

الإصدار 135 من Chrome والإصدارات الأحدث

الخصائص

InjectionTarget

الإصدار 135 من Chrome والإصدارات الأحدث

الخصائص

RegisteredUserScript

الخصائص

ScriptSource

الخصائص

UserScriptFilter

الخصائص

UserScriptInjection

الإصدار 135 من Chrome والإصدارات الأحدث

الخصائص

WorldProperties

الخصائص

الطُرق

configureWorld()

chrome.userScripts.configureWorld(
  properties: WorldProperties,
): Promise

تضبط هذه السمة بيئة تنفيذ `USER_SCRIPT`.

المعلمات

المرتجعات

execute()

الإصدار 135 من Chrome والإصدارات الأحدث

chrome.userScripts.execute(
  injection: UserScriptInjection,
): Promise<InjectionResult[]>

يتيح هذا الإذن إدخال نص برمجي في سياق مستهدف. سيتم تشغيل النص البرمجي تلقائيًا في document_idle، أو فورًا إذا تم تحميل الصفحة من قبل. في حال ضبط السمة injectImmediately، سيتم إدراج النص البرمجي بدون انتظار، حتى إذا لم ينتهِ تحميل الصفحة. إذا تم تقييم النص البرمجي على أنّه وعد، سينتظر المتصفّح إلى أن يتم تنفيذ الوعد ويعرض القيمة الناتجة.

المعلمات

المرتجعات

getScripts()

chrome.userScripts.getScripts(
  filter?: UserScriptFilter,
): Promise<RegisteredUserScript[]>

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

المعلمات

المرتجعات

getWorldConfigurations()

الإصدار 133 من Chrome والإصدارات الأحدث

chrome.userScripts.getWorldConfigurations(): Promise<WorldProperties[]>

يستردّ هذا الإجراء جميع إعدادات العالم المسجّلة.

المرتجعات

register()

chrome.userScripts.register(
  scripts: RegisteredUserScript[],
): Promise

تسجِّل هذه السمة نصًا برمجيًا واحدًا أو أكثر للمستخدم لهذه الإضافة.

المعلمات

المرتجعات

resetWorldConfiguration()

الإصدار 133 من Chrome والإصدارات الأحدث

chrome.userScripts.resetWorldConfiguration(
  worldId?: string,
): Promise

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

المعلمات

المرتجعات

unregister()

chrome.userScripts.unregister(
  filter?: UserScriptFilter,
): Promise

لإلغاء تسجيل جميع نصوص المستخدمين البرمجية المسجّلة ديناميكيًا لهذه الإضافة

المعلمات

المرتجعات

update()

chrome.userScripts.update(
  scripts: RegisteredUserScript[],
): Promise

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

المعلمات

المرتجعات