Trình chạy dịch vụ tiện ích hỗ trợ cả sự kiện của trình chạy dịch vụ chuẩn và nhiều sự kiện trong API tiện ích. Phần này mô tả các tính năng có sẵn và cung cấp mẹo để sử dụng những tính năng đó.
Khai báo sự kiện của tiện ích
Bạn cần khai báo trình xử lý sự kiện trong Service worker trong phạm vi toàn cục, nghĩa là chúng phải ở cấp cao nhất trong tập lệnh và không được lồng bên trong các hàm. Điều này đảm bảo rằng các sự kiện này được đăng ký đồng bộ khi thực thi tập lệnh ban đầu, cho phép Chrome gửi các sự kiện đến trình chạy dịch vụ ngay khi khởi động. Ví dụ:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
Sự kiện thường gặp
Trình chạy dịch vụ tiện ích hỗ trợ các sự kiện trong các API cụ thể. Sau đây là một số ví dụ thường gặp. Xin lưu ý rằng một số API này yêu cầu quyền để sử dụng, còn một số API khác có thể có các sự kiện, phương thức hoặc thuộc tính không có trong một số phiên bản Chrome. Để biết thông tin chi tiết, hãy xem tài liệu về API được liên kết, đặc biệt là các sự kiện, phương thức hoặc thuộc tính mà bạn muốn sử dụng.
chrome.action
- Được kích hoạt khi người dùng tương tác với biểu tượng thanh công cụ của tiện ích, cho dù đó là hành động đối với một trang (thẻ) cụ thể hay đối với toàn bộ tiện ích.
chrome.management
- Cung cấp các sự kiện liên quan đến việc cài đặt, gỡ cài đặt, bật và tắt tiện ích.
chrome.notifications
- Cung cấp các sự kiện liên quan đến hoạt động tương tác của người dùng với thông báo hệ thống do tiện ích tạo ra.
chrome.permissions
- Cho biết thời điểm người dùng cấp hoặc thu hồi quyền sử dụng tiện ích.
chrome.runtime
- Cung cấp các sự kiện liên quan đến vòng đời của tiện ích, thông báo được gửi từ các phần khác của tiện ích và thông báo về một tiện ích hoặc bản cập nhật Chrome có sẵn.
chrome.storage.onChanged
- Được kích hoạt bất cứ khi nào đối tượng
StorageArea
bất kỳ bị xoá hoặc khi giá trị của khoá được thay đổi hoặc đặt. Xin lưu ý rằng mỗi bản saoStorageArea
đều có sự kiệnonChanged
riêng. chrome.webNavigation
- Cung cấp thông tin về trạng thái của các yêu cầu chỉ đường đang diễn ra.
Bộ lọc
Để chỉ cho phép sự kiện diễn ra trong một trường hợp sử dụng cụ thể hoặc loại bỏ các lệnh gọi sự kiện không cần thiết, hãy sử dụng các API hỗ trợ bộ lọc sự kiện. Ví dụ: hãy xem xét một tiện ích theo dõi sự kiện tabs.onUpdated
để phát hiện thời điểm người dùng chuyển đến một trang web cụ thể. Sự kiện này sẽ được gọi trong mọi thao tác trên mỗi thẻ. Thay vào đó, hãy sử dụng webNavigation.onCompleted
kèm theo bộ lọc. Ví dụ:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
Sự kiện của trình chạy dịch vụ web
Trình chạy dịch vụ tiện ích hỗ trợ nhiều hơn các sự kiện trong vòng đời như mô tả ở phần khác.
ServiceWorkerGlobal.fetch
Được kích hoạt khi mọi nội dung được truy xuất từ gói tiện ích hoặc khi fetch()
và XMLHttpRequest()
được gọi từ tiện ích hoặc tập lệnh cửa sổ bật lên. (Các lệnh gọi từ tập lệnh nội dung không bị trình xử lý fetch
của trình chạy dịch vụ chặn.) Trong những trường hợp sau, bạn sẽ phải thêm URL của các trang bạn muốn tìm nạp vào khoá "host_permissions"
trong manifest.json
.
ServiceWorkerGlobal.message
Tính năng truyền thông báo của trình chạy dịch vụ hiện có sẵn bên cạnh tính năng truyền tin nhắn tiện ích, nhưng hai hệ thống này không có khả năng tương tác. Điều đó có nghĩa là các thông báo được gửi bằng sendMessage()
(có sẵn trong một số API tiện ích) sẽ không bị trình xử lý thông báo của trình chạy dịch vụ chặn. Tương tự, các trình xử lý tin nhắn tiện ích sẽ không chặn tin nhắn được gửi bằng postMessage()
. Cả hai loại trình xử lý tin nhắn (nghĩa là cả ServiceWorkerGlobal.message
và chrome.runtime.onMessage
) đều được hỗ trợ trong trình chạy dịch vụ tiện ích.
Bạn nên ưu tiên gửi thông báo tiện ích hơn, trừ phi bạn có lý do cụ thể để sử dụng thông báo của trình chạy dịch vụ.