chrome.action

الوصف

استخدِم واجهة برمجة التطبيقات chrome.action للتحكّم في رمز الإضافة في شريط أدوات Google Chrome.

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

مدى التوفّر

‫Chrome 88 والإصدارات الأحدث MV3+

البيان

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

"action"

لاستخدام واجهة برمجة التطبيقات chrome.action، حدِّد "manifest_version" بالقيمة 3 وأدرِج المفتاح "action" في ملف البيان.

{
  "name": "Action Extension",
  ...
  "action": {
    "default_icon": {              // optional
      "16": "images/icon16.png",   // optional
      "24": "images/icon24.png",   // optional
      "32": "images/icon32.png"    // optional
    },
    "default_title": "Click Me",   // optional, shown in tooltip
    "default_popup": "popup.html"  // optional
  },
  ...
}

المفتاح "action" (مع العناصر التابعة له) اختياري. وعندما لا يتم تضمينها، تظل الإضافة معروضة في شريط الأدوات لتوفير إمكانية الوصول إلى قائمة الإضافة. لهذا السبب، ننصحك دائمًا بتضمين المفتاحين "action" و"default_icon" على الأقل.

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

أجزاء واجهة المستخدم

رمز

الرمز هو الصورة الرئيسية على شريط أدوات الإضافة، ويتم ضبطه باستخدام المفتاح "default_icon" في المفتاح "action" في ملف البيان. يجب أن يكون عرض الرموز وارتفاعها 16 بكسل مستقل عن الجهاز (DIP).

المفتاح "default_icon" هو قاموس للأحجام ومسارات الصور. يستخدم Chrome هذه الرموز لاختيار مقياس الصورة المطلوب استخدامه. في حال عدم العثور على نتيجة مطابقة تمامًا، يختار Chrome أقرب نتيجة متاحة ويغيّر حجمها لتناسب الصورة، ما قد يؤثر في جودة الصورة.

وبما أنّ الأجهزة التي تتضمّن عوامل قياس أقل شيوعًا، مثل 1.5x أو 1.2x، أصبحت أكثر شيوعًا، ننصحك بتوفير أحجام متعددة للرموز. ويضمن ذلك أيضًا توافق الإضافة مع أي تغييرات مستقبلية محتملة في حجم عرض الرموز. ومع ذلك، إذا كنت ستوفّر حجمًا واحدًا فقط، يمكن أيضًا ضبط المفتاح "default_icon" على سلسلة تتضمّن مسارًا إلى رمز واحد بدلاً من قاموس.

يمكنك أيضًا طلب action.setIcon() لضبط رمز الإضافة آليًا من خلال تحديد مسار صورة مختلف أو توفير رمز تم إنشاؤه ديناميكيًا باستخدام عنصر لوحة الرسم HTML، أو، في حال الضبط من عامل خدمة إضافة، باستخدام واجهة برمجة التطبيقات لوحة الرسم خارج الشاشة.

const canvas = new OffscreenCanvas(16, 16);
const context = canvas.getContext('2d');
context.clearRect(0, 0, 16, 16);
context.fillStyle = '#00FF00';  // Green
context.fillRect(0, 0, 16, 16);
const imageData = context.getImageData(0, 0, 16, 16);
chrome.action.setIcon({imageData: imageData}, () => { /* ... */ });

بالنسبة إلى الإضافات المعبّأة (التي يتم تثبيتها من ملف crx.)، يمكن أن تكون الصور بأغلب التنسيقات التي يمكن لمحرك العرض Blink عرضها، بما في ذلك PNG وJPEG وBMP وICO وغيرها. تنسيق SVG غير متوافق. يجب أن تستخدم الإضافات غير المضغوطة صور PNG.

تلميح (عنوان)

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

يتم ضبط تلميح الأدوات التلقائي باستخدام الحقل "default_title" لمفتاح "action" في manifest.json. يمكنك أيضًا ضبطه آليًا من خلال استدعاء action.setTitle().

الشارة

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

لإنشاء شارة، اضبطها برمجيًا من خلال استدعاء action.setBadgeBackgroundColor() وaction.setBadgeText(). لا يتوفّر إعداد تلقائي للشارة في البيان. يمكن أن تكون قيم ألوان الشارات مصفوفة من أربعة أعداد صحيحة تتراوح بين 0 و255 تشكّل لون RGBA للشارة، أو سلسلة تتضمّن قيمة لون CSS.

chrome.action.setBadgeBackgroundColor(
  {color: [0, 255, 0, 0]},  // Green
  () => { /* ... */ },
);

chrome.action.setBadgeBackgroundColor(
  {color: '#00FF00'},  // Also green
  () => { /* ... */ },
);

chrome.action.setBadgeBackgroundColor(
  {color: 'green'},  // Also, also green
  () => { /* ... */ },
);

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

يتم ضبط النافذة المنبثقة في البداية من خلال السمة "default_popup" في المفتاح "action" في ملف manifest.json. في حال توفّرها، يجب أن تشير هذه السمة إلى مسار نسبي ضمن دليل الإضافة. يمكن أيضًا تعديلها بشكل ديناميكي للإشارة إلى مسار نسبي مختلف باستخدام الطريقة action.setPopup().

حالات الاستخدام

الحالة لكل علامة تبويب

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

function getTabId() { /* ... */}
function getTabBadge() { /* ... */}

chrome.action.setBadgeText(
  {
    text: getTabBadge(tabId),
    tabId: getTabId(),
  },
  () => { ... }
);

في حال عدم تضمين السمة tabId، يتم التعامل مع الإعداد على أنّه إعداد عام. تُعطى إعدادات علامة التبويب الأولوية على الإعدادات العامة.

الحالة "مفعَّل"

تكون إجراءات شريط الأدوات مفعَّلة (يمكن النقر عليها) تلقائيًا في كل علامة تبويب. يمكنك تغيير هذه القيمة التلقائية من خلال ضبط السمة default_state في المفتاح action في ملف البيان. إذا تم ضبط قيمة default_state على "disabled"، سيتم إيقاف الإجراء تلقائيًا ويجب تفعيله برمجيًا ليكون قابلاً للنقر. إذا تم ضبط default_state على "enabled" (الإعداد التلقائي)، سيتم تفعيل الإجراء ويمكن النقر عليه تلقائيًا.

يمكنك التحكّم في الحالة آليًا باستخدام الطريقتَين action.enable() وaction.disable(). يؤثر ذلك فقط في ما إذا كان سيتم إرسال النافذة المنبثقة (إن وُجدت) أو حدث action.onClicked إلى الإضافة، ولا يؤثر في ظهور الإجراء في شريط الأدوات.

أمثلة

توضّح الأمثلة التالية بعض الطرق الشائعة لاستخدام الإجراءات في الإضافات. لتجربة واجهة برمجة التطبيقات هذه، ثبِّت مثال Action API من مستودع chrome-extension-samples.

عرض نافذة منبثقة

من الشائع أن تعرض إضافة نافذة منبثقة عندما ينقر المستخدم على إجراء الإضافة. لتنفيذ ذلك في إضافتك، عليك تعريف النافذة المنبثقة في manifest.json وتحديد المحتوى الذي سيعرضه Chrome في النافذة المنبثقة.

// manifest.json
{
  "name": "Action popup demo",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_title": "Click to view a popup",
    "default_popup": "popup.html"
  }
}
<!-- popup.html -->
<!DOCTYPE html>
<html>
<head>
  <style>
    html {
      min-height: 5em;
      min-width: 10em;
      background: salmon;
    }
  </style>
</head>
<body>
  <p>Hello, world!</p>
</body>
</html>

إدخال نص برمجي للمحتوى عند النقر

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

// manifest.json
{
  "name": "Action script injection demo",
  "version": "1.0",
  "manifest_version": 3,
  "action": {
    "default_title": "Click to show an alert"
  },
  "permissions": ["activeTab", "scripting"],
  "background": {
    "service_worker": "background.js"
  }
}
// background.js
chrome.action.onClicked.addListener((tab) => {
  chrome.scripting.executeScript({
    target: {tabId: tab.id},
    files: ['content.js']
  });
});
// content.js
alert('Hello, world!');

محاكاة الإجراءات باستخدام declarativeContent

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

// service-worker.js

// Wrap in an onInstalled callback to avoid unnecessary work
// every time the service worker is run
chrome.runtime.onInstalled.addListener(() => {
  // Page actions are disabled by default and enabled on select tabs
  chrome.action.disable();

  // Clear all rules to ensure only our expected rules are set
  chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
    // Declare a rule to enable the action on example.com pages
    let exampleRule = {
      conditions: [
        new chrome.declarativeContent.PageStateMatcher({
          pageUrl: {hostSuffix: '.example.com'},
        })
      ],
      actions: [new chrome.declarativeContent.ShowAction()],
    };

    // Finally, apply our new array of rules
    let rules = [exampleRule];
    chrome.declarativeContent.onPageChanged.addRules(rules);
  });
});

الأنواع

OpenPopupOptions

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

الخصائص

  • windowId

    number اختياري

    معرّف النافذة التي سيتم فتح النافذة المنبثقة الخاصة بالإجراء فيها يتم ضبط القيمة تلقائيًا على النافذة النشطة حاليًا في حال عدم تحديدها.

TabDetails

الخصائص

  • tabId

    number اختياري

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

UserSettings

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

مجموعة الإعدادات التي يحدّدها المستخدم والمتعلّقة بإجراء إحدى الإضافات

الخصائص

  • isOnToolbar

    قيمة منطقية

    تُستخدَم لتحديد ما إذا كان رمز إجراء الإضافة مرئيًا على شريط الأدوات ذي المستوى الأعلى في نوافذ المتصفح (أي ما إذا كان المستخدم قد "ثبّت" الإضافة).

UserSettingsChange

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

الخصائص

  • isOnToolbar

    boolean اختياري

    تُستخدَم لتحديد ما إذا كان رمز إجراء الإضافة مرئيًا على شريط الأدوات ذي المستوى الأعلى في نوافذ المتصفح (أي ما إذا كان المستخدم قد "ثبّت" الإضافة).

الطُرق

disable()

chrome.action.disable(
  tabId?: number,
)
: Promise<void>

يؤدي هذا الخيار إلى إيقاف الإجراء لعلامة تبويب.

المعلمات

  • tabId

    number اختياري

    معرّف علامة التبويب التي تريد تعديل الإجراء لها.

المرتجعات

  • Promise<void>

enable()

chrome.action.enable(
  tabId?: number,
)
: Promise<void>

تفعيل الإجراء لعلامة تبويب تكون الإجراءات مفعَّلة تلقائيًا.

المعلمات

  • tabId

    number اختياري

    معرّف علامة التبويب التي تريد تعديل الإجراء لها.

المرتجعات

  • Promise<void>

getBadgeBackgroundColor()

chrome.action.getBadgeBackgroundColor(
  details: TabDetails,
)
: Promise<extensionTypes.ColorArray>

تعرض هذه السمة لون خلفية الإجراء.

المعلمات

المرتجعات

getBadgeText()

chrome.action.getBadgeText(
  details: TabDetails,
)
: Promise<string>

تعرض هذه السمة نص الشارة الخاص بالإجراء. إذا لم يتم تحديد علامة تبويب، سيتم عرض نص الشارة غير الخاص بعلامة التبويب. في حال تفعيل displayActionCountAsBadgeText، سيتم عرض نص نائب ما لم يتوفّر الإذن declarativeNetRequestFeedback أو تم تقديم نص شارة خاص بعلامة التبويب.

المعلمات

المرتجعات

  • Promise<string>

getBadgeTextColor()

الإصدار 110 من Chrome والإصدارات الأحدث
chrome.action.getBadgeTextColor(
  details: TabDetails,
)
: Promise<extensionTypes.ColorArray>

تعرض هذه السمة لون نص الإجراء.

المعلمات

المرتجعات

getPopup()

chrome.action.getPopup(
  details: TabDetails,
)
: Promise<string>

تعرض هذه السمة مستند html الذي تم ضبطه كنافذة منبثقة لهذا الإجراء.

المعلمات

المرتجعات

  • Promise<string>

getTitle()

chrome.action.getTitle(
  details: TabDetails,
)
: Promise<string>

تعرض هذه السمة عنوان الإجراء.

المعلمات

المرتجعات

  • Promise<string>

getUserSettings()

الإصدار 91 من Chrome والإصدارات الأحدث
chrome.action.getUserSettings(): Promise<UserSettings>

تعرِض هذه السمة الإعدادات التي يحدّدها المستخدم والمتعلّقة بإجراء إحدى الإضافات.

المرتجعات

isEnabled()

الإصدار 110 من Chrome والإصدارات الأحدث
chrome.action.isEnabled(
  tabId?: number,
)
: Promise<boolean>

يشير إلى ما إذا كان إجراء الإضافة مفعّلاً لعلامة تبويب (أو على مستوى العالم في حال عدم توفير tabId). الإجراءات المفعّلة باستخدام declarativeContent فقط تعرض القيمة "خطأ" دائمًا.

المعلمات

  • tabId

    number اختياري

    معرّف علامة التبويب التي تريد التحقّق من حالة تفعيلها

المرتجعات

  • Promise<boolean>

openPopup()

الإصدار 127 من Chrome والإصدارات الأحدث
chrome.action.openPopup(
  options?: OpenPopupOptions,
)
: Promise<void>

يفتح النافذة المنبثقة للإضافة. بين الإصدار 118 والإصدار 126 من Chrome، لا تتوفّر هذه الميزة إلا للإضافات التي تم تثبيتها من خلال السياسة.

المعلمات

  • الخيارات

    OpenPopupOptions اختيارية

    تحدّد هذه السمة خيارات فتح النافذة المنبثقة.

المرتجعات

  • Promise<void>

setBadgeBackgroundColor()

chrome.action.setBadgeBackgroundColor(
  details: object,
)
: Promise<void>

تضبط هذه السمة لون الخلفية للشارة.

المعلمات

  • التفاصيل

    عنصر

    • اللون

      string | ColorArray

      مصفوفة من أربعة أعداد صحيحة في النطاق [0,255] تشكّل لون RGBA للشارة. على سبيل المثال، يكون اللون الأحمر المعتم [255, 0, 0, 255]. يمكن أن تكون أيضًا سلسلة تتضمّن قيمة CSS، مع كون اللون الأحمر المعتم #FF0000 أو #F00.

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

المرتجعات

  • Promise<void>

setBadgeText()

chrome.action.setBadgeText(
  details: object,
)
: Promise<void>

تضبط هذه السمة نص الشارة للإجراء. يظهر الشعار فوق الرمز.

المعلمات

  • التفاصيل

    عنصر

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

    • نص

      سلسلة اختيارية

      يمكن تمرير أي عدد من الأحرف، ولكن يمكن عرض أربعة أحرف فقط في المساحة. إذا تم تمرير سلسلة فارغة ('')، سيتم محو نص الشارة. في حال تحديد tabId وكانت قيمة text فارغة، سيتم محو النص الخاص بعلامة التبويب المحدّدة وسيتم ضبطه تلقائيًا على نص الشارة العام.

المرتجعات

  • Promise<void>

setBadgeTextColor()

الإصدار 110 من Chrome والإصدارات الأحدث
chrome.action.setBadgeTextColor(
  details: object,
)
: Promise<void>

تضبط هذه السمة لون النص في الشارة.

المعلمات

  • التفاصيل

    عنصر

    • اللون

      string | ColorArray

      مصفوفة من أربعة أعداد صحيحة في النطاق [0,255] تشكّل لون RGBA للشارة. على سبيل المثال، يكون اللون الأحمر المعتم [255, 0, 0, 255]. يمكن أن تكون أيضًا سلسلة تتضمّن قيمة CSS، مع كون اللون الأحمر المعتم #FF0000 أو #F00. سيؤدي عدم ضبط هذه القيمة إلى اختيار لون تلقائيًا يتناقض مع لون خلفية الشارة حتى يظهر النص. لن يتم ضبط الألوان التي تتضمّن قيم ألفا تساوي 0 وسيتم عرض خطأ.

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

المرتجعات

  • Promise<void>

setIcon()

chrome.action.setIcon(
  details: object,
)
: Promise<void>

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

المعلمات

  • التفاصيل

    عنصر

    • imageData

      ImageData | object اختياري

      إما كائن ImageData أو قاموس {size -> ImageData} يمثّل الرمز المطلوب ضبطه. إذا تم تحديد الرمز كقاموس، يتم اختيار الصورة الفعلية التي سيتم استخدامها بناءً على كثافة وحدات البكسل في الشاشة. إذا كان عدد وحدات بكسل الصورة التي تتناسب مع وحدة واحدة من مساحة الشاشة يساوي scale، سيتم اختيار صورة بحجم scale * n، حيث n هو حجم الرمز في واجهة المستخدم. يجب تحديد صورة واحدة على الأقل. يُرجى العِلم أنّ العبارة "details.imageData = foo" تعادل العبارة "details.imageData = {‎'16': foo}".

    • المسار

      string | object اختيارية

      إما مسار صورة نسبي أو قاموس {الحجم -> مسار صورة نسبي} يشير إلى الرمز المطلوب ضبطه. إذا تم تحديد الرمز كقاموس، يتم اختيار الصورة الفعلية التي سيتم استخدامها بناءً على كثافة وحدات البكسل في الشاشة. إذا كان عدد وحدات بكسل الصورة التي تتناسب مع وحدة واحدة من مساحة الشاشة يساوي scale، سيتم اختيار صورة بحجم scale * n، حيث n هو حجم الرمز في واجهة المستخدم. يجب تحديد صورة واحدة على الأقل. يُرجى العِلم أنّ "details.path = foo" تعادل "details.path = {‎'16': foo}"

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

المرتجعات

  • Promise<void>

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

setPopup()

chrome.action.setPopup(
  details: object,
)
: Promise<void>

تضبط هذه السمة مستند HTML ليتم فتحه كنافذة منبثقة عندما ينقر المستخدم على رمز الإجراء.

المعلمات

  • التفاصيل

    عنصر

    • نافذة منبثقة

      سلسلة

      المسار النسبي إلى ملف HTML الذي سيتم عرضه في نافذة منبثقة. إذا تم ضبطها على السلسلة الفارغة ('')، لن يتم عرض أي نافذة منبثقة.

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

المرتجعات

  • Promise<void>

setTitle()

chrome.action.setTitle(
  details: object,
)
: Promise<void>

تضبط هذه السمة عنوان الإجراء. يظهر ذلك في التلميح.

المعلمات

  • التفاصيل

    عنصر

    • tabId

      number اختياري

      يقتصر التغيير على وقت تحديد علامة تبويب معيّنة. تتم إعادة ضبطها تلقائيًا عند إغلاق علامة التبويب.

    • title

      سلسلة

      السلسلة التي يجب أن يعرضها الإجراء عند تمرير مؤشر الماوس فوقه.

المرتجعات

  • Promise<void>

الفعاليات

onClicked

chrome.action.onClicked.addListener(
  callback: function,
)

يتمّ إطلاق هذا الحدث عند النقر على رمز إجراء. لن يتم تنشيط هذا الحدث إذا كان الإجراء يتضمّن نافذة منبثقة.

المعلمات

  • callback

    دالة

    تظهر المَعلمة callback على النحو التالي:

    (tab: tabs.Tab) => void

onUserSettingsChanged

الإصدار 130 من Chrome والإصدارات الأحدث
chrome.action.onUserSettingsChanged.addListener(
  callback: function,
)

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

المعلمات