Cache: phương thức match()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Phương thức match() của giao diện Cache trả về một Promise phân giải thành Response liên kết với yêu cầu khớp đầu tiên trong đối tượng Cache.
Nếu không tìm thấy kết quả khớp, Promise phân giải thành undefined.
Cú pháp
match(request)
match(request, options)
Tham số
request-
Requestmà bạn đang cố tìm phản hồi trongCache. Đây có thể là một đối tượngRequesthoặc một chuỗi URL. optionsOptional-
Một đối tượng đặt các tùy chọn cho thao tác
match. Các tùy chọn có sẵn là:ignoreSearch-
Một giá trị boolean chỉ định xem có nên bỏ qua chuỗi truy vấn trong URL hay không. Ví dụ: nếu đặt thành
true, phần?value=barcủahttps://example.com/?value=barsẽ bị bỏ qua khi thực hiện so khớp. Giá trị mặc định làfalse. ignoreMethod-
Một giá trị boolean, khi đặt thành
true, ngăn các thao tác so khớp xác thực phương thứcRequesthttp(thường chỉGETvàHEADđược cho phép). Giá trị mặc định làfalse. ignoreVary-
Một giá trị boolean, khi đặt thành
true, yêu cầu thao tác so khớp không thực hiện so khớp tiêu đềVARY— tức nếu URL khớp bạn sẽ nhận được kết quả bất kể đối tượngResponsecó tiêu đềVARYhay không. Giá trị mặc định làfalse.
Giá trị trả về
Một Promise phân giải thành Response đầu tiên khớp
với yêu cầu hoặc thành undefined nếu không tìm thấy kết quả khớp.
Note:
Cache.match() về cơ bản giống với
Cache.matchAll(), ngoại trừ việc thay vì phân giải thành một mảng
chứa tất cả các phản hồi khớp, nó chỉ phân giải thành phản hồi khớp đầu tiên (tức là
response[0]).
Ví dụ
Ví dụ này lấy từ ví dụ trang offline tùy biến (live demo). Nó dùng bộ nhớ đệm để cung cấp dữ liệu đã chọn khi một yêu cầu thất bại.
Mệnh đề catch() được kích hoạt khi lời gọi fetch() ném ra một
ngoại lệ. Bên trong mệnh đề catch(), match() được dùng để
trả về phản hồi đúng.
Trong ví dụ này, chỉ các tài liệu HTML truy xuất bằng động từ HTTP GET mới được
lưu đệm. Nếu điều kiện if () sai, thì trình xử lý fetch này sẽ không
chặn yêu cầu. Nếu có bất kỳ trình xử lý fetch nào khác được đăng ký, chúng sẽ có cơ hội
gọi event.respondWith(). Nếu không có trình xử lý fetch nào gọi
event.respondWith(), yêu cầu sẽ được trình duyệt xử lý như thể không
có sự tham gia của service worker. Nếu fetch() trả về một phản hồi HTTP hợp lệ
với mã phản hồi trong khoảng 4xx hoặc 5xx, thì catch() sẽ
KHÔNG được gọi.
self.addEventListener("fetch", (event) => {
// Ta chỉ muốn gọi event.respondWith() nếu đây là yêu cầu GET cho tài liệu HTML.
if (
event.request.method === "GET" &&
event.request.headers.get("accept").includes("text/html")
) {
console.log("Handling fetch event for", event.request.url);
event.respondWith(
fetch(event.request).catch((e) => {
console.error("Fetch failed; returning offline page instead.", e);
return caches
.open(OFFLINE_CACHE)
.then((cache) => cache.match(OFFLINE_URL));
}),
);
}
});
Thông số kỹ thuật
| Specification |
|---|
| Service Workers Nightly> # cache-match> |