الوصف
استخدِم واجهة برمجة التطبيقات chrome.alarms لجدولة الرمز البرمجي ليتم تنفيذه بشكل دوري أو في وقت محدّد في المستقبل.
الأذونات
alarmsلاستخدام واجهة برمجة التطبيقات chrome.alarms، عليك الإفصاح عن الإذن "alarms" في ملف البيان:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
المفاهيم والاستخدام
لضمان سلوك موثوق به، من المفيد فهم طريقة عمل واجهة برمجة التطبيقات.
وضع السكون للجهاز
تستمر المنبّهات في العمل أثناء وضع السكون على الجهاز. ومع ذلك، لن يؤدي المنبّه إلى تنبيه الجهاز. وعندما يستيقظ الجهاز، سيتم تشغيل أي منبّهات لم يتم إيقافها. سيتم تشغيل المنبّهات المتكررة مرة واحدة على الأكثر، ثم تتم إعادة جدولتها باستخدام الفترة الزمنية المحدّدة بدءًا من وقت تنبيه الجهاز، بدون أخذ أي وقت انقضى منذ ضبط المنبّه في الأصل في الاعتبار.
الاستمرارية
يمكنك التحكّم في استمرار المنبّه عند إنشائه باستخدام العلامة persistAcrossSessions. يمكن ضبط هذه القيمة على true (تظل محفوظة إلى أن يتم تحديث الإضافة) أو false (تتم إزالتها إذا تمت إعادة تحميل الإضافة أو إعادة تشغيل المتصفّح، وعندما يتم تحديث الإضافة).
المتصفّحات الأخرى والإصدارات الأقدم من Chrome
لا تتوافق هذه السمة مع المتصفحات الأخرى (المشكلة) أو إصدارات Chrome الأقدم من Chrome 150، حيث يمكن أن يكون السلوك غير متوقّع. وبالتالي، من الأفضل التأكّد من وجود تنبيهات مهمة في كل مرة يبدأ فيها عامل الخدمة. على سبيل المثال:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
إذا تم إنشاء المنبّه بشكل ديناميكي استنادًا إلى إجراء المستخدم، قد تحتاج إلى تخزين معلومات إنشاء المنبّه في مكان آخر حتى تتمكّن من إعادة إنشائه عند الحاجة.
أمثلة
توضّح الأمثلة التالية كيفية استخدام المنبّه والردّ عليه. لتجربة واجهة برمجة التطبيقات هذه، ثبِّت مثال Alarm API من مستودع chrome-extension-samples.
ضبط منبّه
يضبط المثال التالي تنبيهًا في عامل الخدمة عند تثبيت إصدار جديد من الإضافة:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
الردّ على إنذار
يضبط المثال التالي رمز شريط أدوات الإجراء استنادًا إلى اسم المنبّه الذي تم إيقافه.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
الأنواع
Alarm
الخصائص
-
الاسم
سلسلة
اسم هذا المنبّه.
-
periodInMinutes
number اختياري
إذا لم يكن فارغًا، يكون المنبّه متكرّرًا وسيتم تشغيله مرة أخرى بعد
periodInMinutesدقيقة. -
persistAcrossSessions
قيمة منطقية
Chrome 150+لتحديد ما إذا كان يجب أن يستمر المنبّه في العمل خلال الجلسات (إعادة تشغيل المتصفّح).
-
scheduledTime
الرقم
الوقت الذي تم فيه تحديد موعد تشغيل هذا المنبّه، بالملّي ثانية بعد العصر (مثل
Date.now() + n). ولأسباب تتعلّق بالأداء، قد يكون المنبّه قد تأخّر بمقدار عشوائي يتجاوز هذا الوقت.
AlarmCreateInfo
الخصائص
-
delayInMinutes
number اختياري
تمثّل هذه السمة مدة الوقت بالدقائق التي يجب بعدها تنشيط الحدث
onAlarm. -
periodInMinutes
number اختياري
في حال ضبط هذه السمة، يجب أن يتم تنشيط الحدث onAlarm كل
periodInMinutesدقيقة بعد الحدث الأوّلي المحدّد بواسطةwhenأوdelayInMinutes. في حال عدم ضبطه، سيتم تشغيل المنبّه مرة واحدة فقط. -
persistAcrossSessions
boolean اختياري
Chrome 150+لتحديد ما إذا كان يجب أن يستمر المنبّه في العمل خلال الجلسات (إعادة تشغيل المتصفّح). في Chrome، يكون هذا الخيار مضبوطًا تلقائيًا على "صحيح" ليتوافق مع السلوك السابق، ولكن يجب ضبطه بشكل صريح لتحقيق أقصى قدر من التوافق مع المتصفّحات الأخرى.
-
متى
number اختياري
الوقت الذي يجب أن يتم فيه تشغيل المنبّه، بالملي ثانية بعد بداية الحقبة (مثلاً
Date.now() + n)
الطُرق
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
يمحو هذا الإجراء المنبّه الذي يحمل الاسم المحدّد.
المعلمات
-
الاسم
سلسلة اختيارية
تمثّل هذه السمة اسم المنبّه المطلوب محوه. القيمة التلقائية هي السلسلة الفارغة.
المرتجعات
-
Promise<boolean>
الإصدار 91 من Chrome أو إصدار أحدث
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
يمحو جميع المنبّهات.
المرتجعات
-
Promise<boolean>
الإصدار 91 من Chrome أو إصدار أحدث
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
تنشئ هذه الطريقة منبّهًا. يتم تنشيط الحدث onAlarm بالقرب من الأوقات المحدّدة في alarmInfo. إذا كان هناك منبّه آخر بالاسم نفسه (أو بدون اسم إذا لم يتم تحديد أي اسم)، سيتم إلغاؤه واستبداله بهذا المنبّه.
للحدّ من الحمل على جهاز المستخدم، يقتصر عدد التنبيهات في Chrome على مرة واحدة كل 30 ثانية على الأكثر، ولكن قد يتم تأخيرها لمدة عشوائية إضافية. أي أنّ ضبط delayInMinutes أو periodInMinutes على قيمة أقل من 0.5 لن يتم تنفيذه وسيؤدي إلى ظهور تحذير. يمكن ضبط قيمة when على أقل من 30 ثانية بعد "الآن" بدون تحذير، ولكن لن يؤدي ذلك إلى تشغيل المنبّه لمدة 30 ثانية على الأقل.
لمساعدتك في تصحيح أخطاء تطبيقك أو إضافتك، عندما يتم تحميلها بدون حزم، لا يوجد حدّ لعدد المرات التي يمكن فيها تشغيل المنبّه.
المعلمات
-
الاسم
سلسلة اختيارية
اسم اختياري لتحديد هذا المنبّه. القيمة التلقائية هي السلسلة الفارغة.
-
alarmInfo
تصف هذه السمة الوقت الذي يجب أن يتم فيه تشغيل المنبّه. يجب تحديد الوقت الأولي باستخدام
whenأوdelayInMinutes(وليس كليهما). في حال ضبطperiodInMinutes، سيتكرر التنبيه كلperiodInMinutesدقيقة بعد الحدث الأولي. إذا لم يتم ضبط أي منwhenأوdelayInMinutesلمنبّه متكرّر، يتم استخدامperiodInMinutesكقيمة تلقائية لـdelayInMinutes.
المرتجعات
-
Promise<void>
الإصدار 111 من Chrome والإصدارات الأحدثوعد يتم تنفيذه عند إنشاء المنبّه.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
يستردّ هذا الإجراء تفاصيل حول المنبّه المحدّد.
المعلمات
-
الاسم
سلسلة اختيارية
اسم المنبّه المطلوب الحصول عليه. القيمة التلقائية هي السلسلة الفارغة.
المرتجعات
-
Promise<Alarm | undefined>
الإصدار 91 من Chrome أو إصدار أحدث
المرتجعات
-
Promise<Alarm[]>
الإصدار 91 من Chrome أو إصدار أحدث