Mô tả
Sử dụng API chrome.alarms để lên lịch chạy mã định kỳ hoặc vào một thời điểm cụ thể trong tương lai.
Quyền
alarmsĐể sử dụng API chrome.alarms, hãy khai báo quyền "alarms" trong tệp kê khai:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Khái niệm và cách sử dụng
Để đảm bảo hành vi đáng tin cậy, bạn nên tìm hiểu cách API hoạt động.
Chế độ ngủ của thiết bị
Chuông báo vẫn tiếp tục chạy khi thiết bị ở chế độ ngủ. Tuy nhiên, báo thức sẽ không đánh thức thiết bị. Khi thiết bị hoạt động trở lại, mọi chuông báo bị bỏ lỡ sẽ đổ chuông. Báo thức lặp lại sẽ kích hoạt tối đa một lần, sau đó được lên lịch lại bằng khoảng thời gian đã chỉ định, bắt đầu từ thời điểm thiết bị thức, không tính đến bất kỳ thời gian nào đã trôi qua kể từ khi báo thức được đặt để chạy lần đầu.
Khả năng lưu trữ dài lâu
Chuông báo thường vẫn tồn tại cho đến khi tiện ích được cập nhật. Tuy nhiên, điều này không được đảm bảo và các cảnh báo có thể bị xoá khi trình duyệt khởi động lại. Do đó, hãy đảm bảo rằng nó tồn tại mỗi khi trình chạy dịch vụ của bạn khởi động. Ví dụ:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Ví dụ
Các ví dụ sau đây minh hoạ cách sử dụng và phản hồi một chuông báo. Để dùng thử API này, hãy cài đặt ví dụ về Alarm API trong kho lưu trữ chrome-extension-samples.
Đặt báo thức
Ví dụ sau đây đặt một báo thức trong trình chạy dịch vụ khi tiện ích được cài đặt:
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
});
});
Phản hồi tín hiệu báo động
Ví dụ sau đây đặt biểu tượng thanh công cụ thao tác dựa trên tên của báo thức đã đổ chuông.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
Loại
Alarm
Thuộc tính
-
tên
chuỗi
Tên của chuông báo này.
-
periodInMinutes
number không bắt buộc
Nếu không phải là giá trị rỗng, thì báo thức là báo thức lặp lại và sẽ kích hoạt lại sau
periodInMinutesphút. -
persistAcrossSessions
boolean
Đang chờ xử lýLiệu chuông báo có nên duy trì trong các phiên (khởi động lại trình duyệt) hay không.
-
scheduledTime
số
Thời gian mà chuông báo này được lên lịch để kích hoạt, tính bằng mili giây kể từ thời gian bắt đầu của hệ thống (ví dụ:
Date.now() + n). Vì lý do hiệu suất, chuông báo có thể bị trì hoãn một khoảng thời gian tuỳ ý ngoài khoảng thời gian này.
AlarmCreateInfo
Thuộc tính
-
delayInMinutes
number không bắt buộc
Khoảng thời gian (tính bằng phút) sau đó sự kiện
onAlarmsẽ kích hoạt. -
periodInMinutes
number không bắt buộc
Nếu được đặt, sự kiện onAlarm sẽ kích hoạt sau mỗi
periodInMinutesphút kể từ sự kiện ban đầu dowhenhoặcdelayInMinuteschỉ định. Nếu không đặt, báo thức sẽ chỉ kích hoạt một lần. -
persistAcrossSessions
boolean không bắt buộc
Đang chờ xử lýLiệu chuông báo có nên duy trì trong các phiên (khởi động lại trình duyệt) hay không. Trong Chrome, giá trị này mặc định là true để phù hợp với hành vi trước đây, nhưng bạn nên đặt giá trị này một cách rõ ràng để tối đa hoá khả năng tương thích trên nhiều trình duyệt.
-
khi
number không bắt buộc
Thời gian mà báo thức sẽ kích hoạt, tính bằng mili giây kể từ thời gian bắt đầu của hệ thống (ví dụ:
Date.now() + n).
Phương thức
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
Xoá chuông báo có tên đã cho.
Thông số
-
tên
chuỗi không bắt buộc
Tên của chuông báo cần xoá. Giá trị mặc định là chuỗi trống.
Giá trị trả về
-
Promise<boolean>
Chrome 91 trở lên
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
Xoá tất cả chuông báo.
Giá trị trả về
-
Promise<boolean>
Chrome 91 trở lên
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Tạo chuông báo. Gần đến(các) thời điểm do alarmInfo chỉ định, sự kiện onAlarm sẽ được kích hoạt. Nếu có một chuông báo khác có cùng tên (hoặc không có tên nếu bạn không chỉ định), thì chuông báo đó sẽ bị huỷ và thay thế bằng chuông báo này.
Để giảm tải cho máy của người dùng, Chrome giới hạn số lượng chuông báo ở mức tối đa là 1 lần mỗi 30 giây nhưng có thể trì hoãn thêm một khoảng thời gian tuỳ ý. Tức là việc đặt delayInMinutes hoặc periodInMinutes thành giá trị nhỏ hơn 0.5 sẽ không được chấp nhận và sẽ gây ra cảnh báo. Bạn có thể đặt when thành dưới 30 giây sau "bây giờ" mà không có cảnh báo, nhưng thực tế thì báo thức sẽ không kích hoạt trong ít nhất 30 giây.
Để giúp bạn gỡ lỗi ứng dụng hoặc tiện ích, khi bạn đã tải ứng dụng hoặc tiện ích đó ở trạng thái chưa đóng gói, sẽ không có giới hạn về tần suất kích hoạt chuông báo.
Thông số
-
tên
chuỗi không bắt buộc
Tên không bắt buộc để xác định chuông báo này. Giá trị mặc định là chuỗi trống.
-
alarmInfo
Mô tả thời điểm báo thức sẽ kích hoạt. Bạn phải chỉ định thời gian ban đầu bằng
whenhoặcdelayInMinutes(chỉ 1 trong 2 cột này). Nếu bạn đặtperiodInMinutes, thì báo thức sẽ lặp lại sau mỗiperiodInMinutesphút kể từ sự kiện ban đầu. Nếu bạn không đặtwhenhoặcdelayInMinutescho chuông báo thức lặp lại, thìperiodInMinutessẽ được dùng làm giá trị mặc định chodelayInMinutes.
Giá trị trả về
-
Promise<void>
Chrome 111 trở lênPromise sẽ phân giải khi chuông báo được tạo.
get()
chrome.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Truy xuất thông tin chi tiết về chuông báo đã chỉ định.
Thông số
-
tên
chuỗi không bắt buộc
Tên của chuông báo cần lấy. Giá trị mặc định là chuỗi trống.
Giá trị trả về
-
Promise<Alarm | undefined>
Chrome 91 trở lên
Giá trị trả về
-
Promise<Alarm[]>
Chrome 91 trở lên
Sự kiện
onAlarm
chrome.alarms.onAlarm.addListener(
callback: function,
)
Được kích hoạt khi báo thức đã hết thời gian. Hữu ích cho các trang sự kiện.
Thông số
-
callback
hàm
Tham số
callbackcó dạng như sau:(alarm: Alarm) => void
-
chuông báo
-