chrome.alarms

คำอธิบาย

ใช้ chrome.alarms API เพื่อกำหนดเวลาให้โค้ดทำงานเป็นระยะๆ หรือในเวลาที่ระบุในอนาคต

สิทธิ์

alarms

หากต้องการใช้ chrome.alarms API ให้ประกาศสิทธิ์ "alarms" ในไฟล์ Manifest ดังนี้

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

แนวคิดและการใช้งาน

การทำความเข้าใจลักษณะการทำงานของ API จะช่วยให้มั่นใจได้ถึงลักษณะการทำงานที่เชื่อถือได้

การเข้าสู่โหมดสลีปของอุปกรณ์

การปลุกจะยังคงทำงานต่อไปขณะที่อุปกรณ์เข้าสู่โหมดสลีป อย่างไรก็ตาม สัญญาณปลุกจะไม่ปลุกระบบอุปกรณ์ เมื่ออุปกรณ์ตื่นขึ้น การปลุกที่พลาดไปจะเริ่มทำงาน การปลุกซ้ำจะเริ่มทำงานอย่างน้อย 1 ครั้ง แล้วกำหนดเวลาใหม่โดยใช้ช่วงเวลาที่ระบุโดยเริ่มจากเวลาที่อุปกรณ์ตื่นขึ้น โดยไม่คำนึงถึงเวลาที่ผ่านไปแล้วนับตั้งแต่มีการตั้งเวลาปลุกไว้แต่เดิม

ความต่อเนื่อง

โดยทั่วไปแล้ว การปลุกจะยังคงอยู่จนกว่าจะมีการอัปเดตส่วนขยาย อย่างไรก็ตาม ระบบไม่รับประกันว่าการปลุกจะยังคงอยู่ และอาจล้างการปลุกเมื่อรีสตาร์ทเบราว์เซอร์ ดังนั้น โปรดตรวจสอบว่าการปลุกมีอยู่ทุกครั้งที่ Service Worker เริ่มทำงาน เช่น

async function checkAlarmState() {
  const alarm = await chrome.alarms.get("my-alarm");

  if (!alarm) {
    await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
  }
}

checkAlarmState();

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีใช้และตอบสนองต่อการปลุก หากต้องการลองใช้ API นี้ ให้ติดตั้งตัวอย่าง Alarm API จากที่เก็บ chrome-extension-samples

ตั้งปลุก

ตัวอย่างต่อไปนี้จะตั้งปลุกใน Service Worker เมื่อมีการติดตั้งส่วนขยาย

service-worker.js:

chrome.runtime.onInstalled.addListener(async ({ reason }) => {
  if (reason !== 'install') {
    return;
  }

  // Create an alarm so we have something to look at in the demo
  await chrome.alarms.create('demo-default-alarm', {
    delayInMinutes: 1,
    periodInMinutes: 1
  });
});

ตอบสนองต่อการปลุก

ตัวอย่างต่อไปนี้จะตั้งค่าไอคอนแถบเครื่องมือการดำเนินการตามชื่อการปลุกที่เริ่มทำงาน

service-worker.js:

chrome.alarms.onAlarm.addListener((alarm) => {
  chrome.action.setIcon({
    path: getIconPath(alarm.name),
  });
});

ประเภท

Alarm

พร็อพเพอร์ตี้

  • ชื่อ

    สตริง

    ชื่อการปลุกนี้

  • periodInMinutes

    ตัวเลข ไม่บังคับ

    หากไม่ใช่ค่า Null การปลุกจะเป็นการปลุกซ้ำและจะเริ่มทำงานอีกครั้งใน periodInMinutes นาที

  • persistAcrossSessions

    บูลีน

    รอดำเนินการ

    ระบุว่าการปลุกควรยังคงอยู่ระหว่างเซสชัน (การรีสตาร์ทเบราว์เซอร์) หรือไม่

  • scheduledTime

    ตัวเลข

    เวลาเป็นมิลลิวินาทีหลัง Epoch (เช่น Date.now() + n) ที่กำหนดเวลาให้สัญญาณปลุกนี้เริ่มทำงาน ระบบอาจเลื่อนเวลาปลุกออกไปอีกเล็กน้อยเพื่อประสิทธิภาพ

AlarmCreateInfo

พร็อพเพอร์ตี้

  • delayInMinutes

    ตัวเลข ไม่บังคับ

    ระยะเวลาเป็นนาทีหลังจากที่เหตุการณ์ onAlarm ควรเริ่มทำงาน

  • periodInMinutes

    ตัวเลข ไม่บังคับ

    หากตั้งค่าไว้ เหตุการณ์ onAlarm ควรเริ่มทำงานทุกๆ periodInMinutes นาทีหลังจากเหตุการณ์เริ่มต้นที่ระบุโดย when หรือ delayInMinutes หากไม่ได้ตั้งค่าไว้ การปลุกจะเริ่มทำงานเพียงครั้งเดียว

  • persistAcrossSessions

    บูลีน ไม่บังคับ

    รอดำเนินการ

    ระบุว่าการปลุกควรยังคงอยู่ระหว่างเซสชัน (การรีสตาร์ทเบราว์เซอร์) หรือไม่ ใน Chrome ค่าเริ่มต้นจะเป็น "จริง" เพื่อให้ตรงกับลักษณะการทำงานในอดีต แต่คุณควรตั้งค่านี้อย่างชัดเจนเพื่อเพิ่มความเข้ากันได้สูงสุดในเบราว์เซอร์ต่างๆ

  • when

    ตัวเลข ไม่บังคับ

    เวลาเป็นมิลลิวินาทีหลัง Epoch (เช่น Date.now() + n) ที่การปลุกควรเริ่มทำงาน

เมธอด

clear()

chrome.alarms.clear(
  name?: string,
)
: Promise<boolean>

ล้างการปลุกที่มีชื่อที่ระบุ

พารามิเตอร์

  • ชื่อ

    สตริง ไม่บังคับ

    ชื่อการปลุกที่จะล้าง ค่าเริ่มต้นจะเป็นสตริงว่าง

การคืนสินค้า

  • Promise<boolean>

    Chrome 91 ขึ้นไป

clearAll()

chrome.alarms.clearAll(): Promise<boolean>

ล้างการปลุกทั้งหมด

การคืนสินค้า

  • Promise<boolean>

    Chrome 91 ขึ้นไป

create()

chrome.alarms.create(
  name?: string,
  alarmInfo: AlarmCreateInfo,
)
: Promise<void>

สร้างการปลุก เหตุการณ์ onAlarm จะเริ่มทำงานใกล้กับเวลาที่ระบุโดย alarmInfo หากมีการปลุกอื่นที่มีชื่อเดียวกัน (หรือไม่มีชื่อหากไม่ได้ระบุ) ระบบจะยกเลิกการปลุกนั้นและแทนที่ด้วยการปลุกนี้

Chrome จำกัดการปลุกไว้ที่อย่างน้อย 1 ครั้งทุกๆ 30 วินาที แต่ระบบอาจเลื่อนเวลาปลุกออกไปอีกเล็กน้อยเพื่อลดภาระงานในเครื่องของผู้ใช้ นั่นคือ การตั้งค่า delayInMinutes หรือ periodInMinutes ให้น้อยกว่า 0.5 จะไม่ได้รับการยอมรับและจะทำให้เกิดคำเตือน คุณสามารถตั้งค่า when ให้น้อยกว่า 30 วินาทีหลังจาก "ตอนนี้" ได้โดยไม่มีคำเตือน แต่สัญญาณปลุกจะไม่เริ่มทำงานจริงอย่างน้อย 30 วินาที

เมื่อคุณโหลดแอปหรือส่วนขยายที่คลายการแพคข้อมูลแล้ว จะไม่มีการจำกัดความถี่ที่สัญญาณปลุกจะเริ่มทำงาน เพื่อช่วยคุณในการแก้ไขข้อบกพร่องของแอปหรือส่วนขยาย

พารามิเตอร์

  • ชื่อ

    สตริง ไม่บังคับ

    ชื่อที่ไม่บังคับเพื่อระบุการปลุกนี้ ค่าเริ่มต้นจะเป็นสตริงว่าง

  • alarmInfo

    อธิบายเวลาที่การปลุกควรเริ่มทำงาน คุณต้องระบุเวลาเริ่มต้นด้วย when หรือ delayInMinutes (แต่ไม่ใช่ทั้ง 2 อย่าง) หากตั้งค่า periodInMinutes ไว้ การปลุกจะทำซ้ำทุกๆ periodInMinutes นาทีหลังจากเหตุการณ์เริ่มต้น หากไม่ได้ตั้งค่า when หรือ delayInMinutes สำหรับการปลุกซ้ำ ระบบจะใช้ periodInMinutes เป็นค่าเริ่มต้นสำหรับ delayInMinutes

การคืนสินค้า

  • Promise<void>

    Chrome 111 ขึ้นไป

    Promise ที่แสดงผลเมื่อมีการสร้างการปลุก

get()

chrome.alarms.get(
  name?: string,
)
: Promise<Alarm | undefined>

ดึงข้อมูลรายละเอียดเกี่ยวกับการปลุกที่ระบุ

พารามิเตอร์

  • ชื่อ

    สตริง ไม่บังคับ

    ชื่อการปลุกที่จะดึงข้อมูล ค่าเริ่มต้นจะเป็นสตริงว่าง

การคืนสินค้า

  • Promise<Alarm | undefined>

    Chrome 91 ขึ้นไป

getAll()

chrome.alarms.getAll(): Promise<Alarm[]>

รับอาร์เรย์ของการปลุกทั้งหมด

การคืนสินค้า

  • Promise<Alarm[]>

    Chrome 91 ขึ้นไป

กิจกรรม

onAlarm

chrome.alarms.onAlarm.addListener(
  callback: function,
)

เริ่มทำงานเมื่อการปลุกหมดเวลา มีประโยชน์สำหรับหน้ากิจกรรม

พารามิเตอร์

  • callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้:

    (alarm: Alarm) => void