คำอธิบาย
ใช้ chrome.alarms
API เพื่อกำหนดเวลาให้โค้ดทำงานเป็นระยะๆ หรือตามเวลาที่ระบุในอนาคต
สิทธิ์
alarms
หากต้องการใช้ chrome.alarms
API ให้ประกาศสิทธิ์ "alarms"
ในmanifest
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
แนวคิดและการใช้งาน
คุณควรทำความเข้าใจลักษณะการทํางานของ API เพื่อให้มั่นใจว่า API จะทํางานอย่างถูกต้อง
อุปกรณ์เข้าสู่โหมดสลีป
การปลุกจะทำงานต่อไปขณะที่อุปกรณ์อยู่ในโหมดสลีป แต่การปลุกจะไม่ทำให้อุปกรณ์ตื่นขึ้น เมื่ออุปกรณ์ตื่นขึ้น การปลุกที่พลาดไปจะดังขึ้น การปลุกซ้ำจะทำงานไม่เกิน 1 ครั้ง จากนั้นระบบจะกำหนดเวลาใหม่โดยใช้ระยะเวลาที่ระบุโดยเริ่มจากเวลาที่อุปกรณ์ตื่นขึ้น โดยไม่คำนึงถึงเวลาที่ผ่านไปแล้วนับตั้งแต่ตั้งปลุกให้ทำงานในตอนแรก
ความต่อเนื่อง
โดยทั่วไปแล้ว เสียงปลุกจะยังคงอยู่จนกว่าส่วนขยายจะได้รับการอัปเดต อย่างไรก็ตาม เราไม่รับประกันการดำเนินการนี้ และระบบอาจล้างการแจ้งเตือนเมื่อเบราว์เซอร์รีสตาร์ท ดังนั้น ให้ลองตั้งค่าในที่จัดเก็บเมื่อสร้างการแจ้งเตือน แล้วตรวจสอบว่าค่าดังกล่าวมีอยู่ทุกครั้งที่ Service Worker เริ่มทำงาน เช่น
const STORAGE_KEY = "user-preference-alarm-enabled";
async function checkAlarmState() {
const { alarmEnabled } = await chrome.storage.get(STORAGE_KEY);
if (alarmEnabled) {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create({ 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
ตัวเลข ไม่บังคับ
หากไม่ใช่ค่าว่าง การปลุกจะเป็นการปลุกซ้ำและจะทํางานอีกครั้งในอีก
periodInMinutes
นาที -
scheduledTime
ตัวเลข
เวลาที่ตั้งเวลาให้สัญญาณเตือนนี้เริ่มทำงานเป็นมิลลิวินาทีนับจากจุดเริ่มต้น (เช่น
Date.now() + n
) สัญญาณเตือนอาจล่าช้ากว่าเวลานี้ตามจำนวนที่กำหนดไว้เพื่อเหตุผลด้านประสิทธิภาพ
AlarmCreateInfo
พร็อพเพอร์ตี้
-
delayInMinutes
ตัวเลข ไม่บังคับ
ระยะเวลาเป็นนาทีหลังจากเหตุการณ์
onAlarm
ควรเริ่มทํางาน -
periodInMinutes
ตัวเลข ไม่บังคับ
หากตั้งค่าไว้ เหตุการณ์ onAlarm ควรเริ่มทุกๆ
periodInMinutes
นาทีหลังจากเหตุการณ์เริ่มต้นที่ระบุโดยwhen
หรือdelayInMinutes
หากไม่ได้ตั้งค่าไว้ การปลุกจะทำงานเพียงครั้งเดียว -
เมื่อใด
ตัวเลข ไม่บังคับ
เวลาที่ตั้งปลุกไว้เป็นมิลลิวินาทีนับจาก Epoch (เช่น
Date.now() + n
)
เมธอด
clear()
chrome.alarms.clear(
name?: string,
callback?: function,
)
ล้างการปลุกที่มีชื่อที่ระบุ
พารามิเตอร์
-
ชื่อ
สตริง ไม่บังคับ
ชื่อของนาฬิกาปลุกที่จะล้าง ค่าเริ่มต้นจะเป็นสตริงว่างเปล่า
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(wasCleared: boolean) => void
-
wasCleared
บูลีน
-
การคืนสินค้า
-
Promise<boolean>
Chrome 91 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
clearAll()
chrome.alarms.clearAll(
callback?: function,
)
ล้างการตั้งปลุกทั้งหมด
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(wasCleared: boolean) => void
-
wasCleared
บูลีน
-
การคืนสินค้า
-
Promise<boolean>
Chrome 91 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
callback?: function,
)
สร้างการปลุก ระบบจะเรียกเหตุการณ์ onAlarm
ให้แสดงเมื่อใกล้ถึงเวลาที่ระบุโดย alarmInfo
หากมีแอปการปลุกอื่นที่ใช้ชื่อเดียวกัน (หรือไม่มีชื่อหากไม่ได้ระบุ) ระบบจะยกเลิกการปลุกนั้นและแทนที่ด้วยการปลุกนี้
Chrome จะจำกัดการปลุกไว้ที่ไม่เกิน 1 ครั้งทุก 30 วินาที แต่อาจเลื่อนการปลุกออกไปอีกตามต้องการเพื่อลดภาระในเครื่องของผู้ใช้ กล่าวคือ ระบบจะไม่ใช้การตั้งค่า delayInMinutes
หรือ periodInMinutes
ให้น้อยกว่า 0.5
และระบบจะแสดงคําเตือน when
สามารถตั้งค่าให้น้อยกว่า 30 วินาทีหลังจาก "ตอนนี้" ได้โดยไม่แสดงคำเตือน แต่จะไม่ทริกเกอร์การปลุกเป็นเวลาอย่างน้อย 30 วินาที
เมื่อโหลดแอปหรือส่วนขยายแบบไม่ได้แตกไฟล์แล้ว ระบบจะไม่จำกัดความถี่ในการส่งเสียงปลุกเพื่อช่วยคุณแก้ไขข้อบกพร่องของแอปหรือส่วนขยาย
พารามิเตอร์
-
ชื่อ
สตริง ไม่บังคับ
ชื่อเพิ่มเติมที่จะระบุสัญญาณเตือนนี้ ค่าเริ่มต้นจะเป็นสตริงว่างเปล่า
-
alarmInfo
อธิบายว่าการตั้งปลุกควรเริ่มทํางานเมื่อใด ต้องระบุเวลาเริ่มต้นด้วย
when
หรือdelayInMinutes
(อย่างใดอย่างหนึ่ง) หากตั้งค่าเป็นperiodInMinutes
ระบบจะส่งเสียงปลุกซ้ำทุกๆperiodInMinutes
นาทีหลังจากเหตุการณ์แรก หากไม่ได้ตั้งค่าwhen
หรือdelayInMinutes
สำหรับการปลุกซ้ำ ระบบจะใช้periodInMinutes
เป็นค่าเริ่มต้นสำหรับdelayInMinutes
-
Callback
ฟังก์ชัน ไม่บังคับ
Chrome 111 ขึ้นไปพารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
การคืนสินค้า
-
Promise<void>
Chrome 111 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
get()
chrome.alarms.get(
name?: string,
callback?: function,
)
ดึงข้อมูลรายละเอียดเกี่ยวกับการปลุกที่ระบุ
พารามิเตอร์
การคืนสินค้า
-
Promise<Alarm | undefined>
Chrome 91 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
getAll()
chrome.alarms.getAll(
callback?: function,
)
รับอาร์เรย์ของการตั้งปลุกทั้งหมด
พารามิเตอร์
การคืนสินค้า
-
Promise<Alarm[]>
Chrome 91 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ