Workbox được xây dựng theo mô-đun, cho phép nhà phát triển chọn các phần họ muốn sử dụng mà không buộc họ phải tải mọi thứ xuống trong một tệp.
Tuy nhiên, có sự trùng lặp giữa các mô-đun, ví dụ: mỗi mô-đun sẽ cần tương tác với bảng điều khiển, gửi lỗi có ý nghĩa và sử dụng mạng hoặc bộ nhớ đệm. Để tránh việc mỗi mô-đun triển khai cùng một logic, workbox-core
chứa mã chung mà mỗi mô-đun dựa vào.
Mô-đun này cung cấp một số chức năng cho nhà phát triển, nhưng ngoài các cấp độ ghi nhật ký và lưu vào bộ nhớ đệm, workbox-core
còn cung cấp logic nội bộ cho từng mô-đun, thay vì nhà phát triển cuối cùng.
Xem và thay đổi tên bộ nhớ đệm mặc định
Workbox xác định bộ nhớ đệm thông qua cacheNames
:
import {cacheNames} from 'workbox-core';
console.log(cacheNames.precache);
console.log(cacheNames.runtime);
console.log(cacheNames.googleAnalytics);
Các tên bộ nhớ đệm này được tạo ở định dạng tiền tố, tên và hậu tố, trong đó tên thay đổi dựa trên việc sử dụng bộ nhớ đệm.
<prefix>-<cache-id>-<suffix>
Bạn có thể thay đổi các tên mặc định này bằng cách thay đổi tất cả hoặc một số giá trị được truyền đến setCacheNameDetails()
.
import {cacheNames, setCacheNameDetails} from 'workbox-core';
setCacheNameDetails({
prefix: 'my-app',
suffix: 'v1',
precache: 'install-time',
runtime: 'run-time',
googleAnalytics: 'ga',
});
// Will print 'my-app-install-time-v1'
console.log(cacheNames.precache);
// Will print 'my-app-run-time-v1'
console.log(cacheNames.runtime);
// Will print 'my-app-ga-v1'
console.log(cacheNames.googleAnalytics);
Trường hợp sử dụng chính của tiền tố và hậu tố là nếu bạn sử dụng Workbox cho nhiều dự án và sử dụng cùng một cổng máy chủ cục bộ cho mỗi dự án, thì việc đặt tiền tố tuỳ chỉnh cho mỗi mô-đun sẽ ngăn bộ nhớ đệm xung đột với nhau.
Xác nhận quyền sở hữu của khách hàng
Một số nhà phát triển muốn có thể phát hành một worker dịch vụ mới và yêu cầu worker này kiểm soát các trang web đã mở ngay khi worker này kích hoạt. Điều này sẽ không xảy ra theo mặc định.
Nếu bạn muốn hành vi này, workbox-core
sẽ cung cấp một phương thức trợ giúp:
import {clientsClaim} from 'workbox-core';
// This clientsClaim() should be at the top level
// of your service worker, not inside of, e.g.,
// an event handler.
clientsClaim();
Phương thức clientsClaim()
trong workbox-core
sẽ tự động thêm trình nghe sự kiện activate
vào worker dịch vụ và bên trong đó, gọi self.clients.claim()
. Việc gọi self.clients.claim()
trước khi worker dịch vụ hiện tại kích hoạt sẽ dẫn đến một ngoại lệ thời gian chạy và trình bao bọc của workbox-core
giúp đảm bảo rằng bạn gọi worker đó vào đúng thời điểm.
Không dùng trình bao bọc skipWaiting nữa
Trước Workbox phiên bản 6, nhà phát triển cũng được khuyến khích sử dụng phương thức skipWaiting()
từ workbox-core
. Tuy nhiên, phương thức này không mang lại nhiều giá trị ngoài những gì nhà phát triển nhận được nếu họ gọi self.skipWaiting()
một cách rõ ràng.
Vì trình bao bọc workbox-core
cũ cũng đã đăng ký một trình xử lý sự kiện install
trong đó self.skipWaiting()
được gọi, nên trình bao bọc sẽ không hoạt động như mong đợi nếu được gọi bên trong một trình xử lý sự kiện khác, chẳng hạn như message
, sau khi quá trình cài đặt đã hoàn tất.
Vì những lý do này, skipWaiting()
của workbox-core
không còn được dùng nữa và nhà phát triển nên chuyển sang gọi trực tiếp self.skipWaiting()
. Không giống như self.clients.claim()
, self.skipWaiting()
sẽ không gửi ngoại lệ nếu được gọi vào thời điểm "sai", vì vậy, bạn không cần phải gói phương thức này trong trình xử lý sự kiện.
Loại
CacheDidUpdateCallback()
workbox-core.CacheDidUpdateCallback(
param: CacheDidUpdateCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void>
CacheDidUpdateCallbackParam
Thuộc tính
-
cacheName
chuỗi
-
event
ExtendableEvent
-
newResponse
Phản hồi
-
oldResponse
Phản hồi không bắt buộc
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
CachedResponseWillBeUsedCallback()
workbox-core.CachedResponseWillBeUsedCallback(
param: CachedResponseWillBeUsedCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void | Response>
CachedResponseWillBeUsedCallbackParam
Thuộc tính
-
cacheName
chuỗi
-
cachedResponse
Phản hồi không bắt buộc
-
event
ExtendableEvent
-
matchOptions
CacheQueryOptions không bắt buộc
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
CacheKeyWillBeUsedCallback()
workbox-core.CacheKeyWillBeUsedCallback(
param: CacheKeyWillBeUsedCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<string | Request>
CacheKeyWillBeUsedCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
chế độ
chuỗi
-
tham số
bất kỳ không bắt buộc nào
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
CacheWillUpdateCallback()
workbox-core.CacheWillUpdateCallback(
param: CacheWillUpdateCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void | Response>
CacheWillUpdateCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi
-
tiểu bang
MapLikeObject không bắt buộc
FetchDidFailCallback()
workbox-core.FetchDidFailCallback(
param: FetchDidFailCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void>
FetchDidFailCallbackParam
Thuộc tính
-
error
Lỗi
-
event
ExtendableEvent
-
originalRequest
Yêu cầu
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
FetchDidSucceedCallback()
workbox-core.FetchDidSucceedCallback(
param: FetchDidSucceedCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<Response>
FetchDidSucceedCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi
-
tiểu bang
MapLikeObject không bắt buộc
HandlerCallbackOptions
HandlerDidCompleteCallback()
workbox-core.HandlerDidCompleteCallback(
param: HandlerDidCompleteCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void>
HandlerDidCompleteCallbackParam
Thuộc tính
-
error
Lỗi không bắt buộc
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi không bắt buộc
-
tiểu bang
MapLikeObject không bắt buộc
HandlerDidErrorCallback()
workbox-core.HandlerDidErrorCallback(
param: HandlerDidErrorCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<Response>
HandlerDidErrorCallbackParam
Thuộc tính
-
error
Lỗi
-
event
ExtendableEvent
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
HandlerDidRespondCallback()
workbox-core.HandlerDidRespondCallback(
param: HandlerDidRespondCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void>
HandlerDidRespondCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi không bắt buộc
-
tiểu bang
MapLikeObject không bắt buộc
HandlerWillRespondCallback()
workbox-core.HandlerWillRespondCallback(
param: HandlerWillRespondCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<Response>
HandlerWillRespondCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi
-
tiểu bang
MapLikeObject không bắt buộc
HandlerWillStartCallback()
workbox-core.HandlerWillStartCallback(
param: HandlerWillStartCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<void>
HandlerWillStartCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
ManualHandlerCallback()
workbox-core.ManualHandlerCallback(
options: ManualHandlerCallbackOptions,
)
Lệnh gọi lại "trình xử lý" được gọi bất cứ khi nào Router
so khớp URL/Yêu cầu với Route
thông qua RouteMatchCallback
. Lệnh gọi lại trình xử lý này sẽ trả về một Promise
phân giải bằng Response
.
Nếu RouteMatchCallback
trả về một mảng hoặc đối tượng không trống, thì mảng hoặc đối tượng đó sẽ được truyền vào dưới dạng đối số options.params
của trình xử lý này.
Tham số
-
tùy chọn
Giá trị trả về
-
Promise<Response>
ManualHandlerCallbackOptions
Các tuỳ chọn được truyền đến hàm ManualHandlerCallback
.
Thuộc tính
-
event
ExtendableEvent
-
request
string | Yêu cầu
MapLikeObject
PluginState
Hiện tại, bạn có thể sử dụng MapLikeObject
thuần tuý, nhưng có thể mở rộng/hạn chế việc này trong tương lai.
Loại
RequestWillFetchCallback()
workbox-core.RequestWillFetchCallback(
param: RequestWillFetchCallbackParam,
)
Tham số
Giá trị trả về
-
Promise<Request>
RequestWillFetchCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
tiểu bang
MapLikeObject không bắt buộc
RouteHandler
RouteHandlerCallback
hoặc RouteHandlerObject
.
Hầu hết các API trong workbox-routing
chấp nhận trình xử lý tuyến đều sử dụng một trong hai phương thức này.
RouteHandlerCallback()
workbox-core.RouteHandlerCallback(
options: RouteHandlerCallbackOptions,
)
Lệnh gọi lại "trình xử lý" được gọi bất cứ khi nào Router
khớp với URL/Yêu cầu với Route
thông qua RouteMatchCallback
. Lệnh gọi lại trình xử lý này sẽ trả về một Promise
phân giải bằng Response
.
Nếu RouteMatchCallback
trả về một mảng hoặc đối tượng không trống, thì mảng hoặc đối tượng đó sẽ được truyền vào dưới dạng đối số options.params
của trình xử lý này.
Tham số
-
tùy chọn
Giá trị trả về
-
Promise<Response>
RouteHandlerCallbackOptions
Các tuỳ chọn được truyền đến hàm RouteHandlerCallback
.
Thuộc tính
-
event
ExtendableEvent
-
tham số
string[] | MapLikeObject không bắt buộc
-
request
Yêu cầu
-
url
URL
RouteHandlerObject
Một đối tượng có phương thức handle
thuộc loại RouteHandlerCallback
.
Bạn có thể tạo đối tượng Route
bằng hàm RouteHandlerCallback
hoặc đối tượng RouteHandler
này. Lợi ích của RouteHandler
là bạn có thể mở rộng (như gói workbox-strategies
đã làm).
Thuộc tính
-
handle
RouteMatchCallback()
workbox-core.RouteMatchCallback(
options: RouteMatchCallbackOptions,
)
Lệnh gọi lại "khớp" được dùng để xác định xem Route
có nên áp dụng cho một URL và yêu cầu cụ thể hay không. Khi quá trình so khớp xảy ra để phản hồi một sự kiện tìm nạp từ ứng dụng, đối tượng event
cũng được cung cấp. Tuy nhiên, vì hàm gọi lại so khớp có thể được gọi bên ngoài sự kiện tìm nạp, nên logic so khớp không được giả định rằng đối tượng event
sẽ luôn có sẵn.
Nếu lệnh gọi lại khớp trả về một giá trị đúng, thì RouteHandlerCallback
của tuyến khớp sẽ được gọi ngay lập tức. Nếu giá trị được trả về là một mảng hoặc đối tượng không trống, thì giá trị đó sẽ được đặt trên đối số options.params
của trình xử lý.
Tham số
-
tùy chọn
Giá trị trả về
-
bất kỳ
RouteMatchCallbackOptions
Các tuỳ chọn được truyền đến hàm RouteMatchCallback
.
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
sameOrigin
boolean
-
url
URL
WorkboxPlugin
Một đối tượng có các thuộc tính gọi lại vòng đời không bắt buộc cho các thao tác tìm nạp và lưu vào bộ nhớ đệm.
Thuộc tính
-
cacheDidUpdate
CacheDidUpdateCallback không bắt buộc
-
cacheKeyWillBeUsed
CacheKeyWillBeUsedCallback không bắt buộc
-
cacheWillUpdate
CacheWillUpdateCallback không bắt buộc
-
cachedResponseWillBeUsed
CachedResponseWillBeUsedCallback không bắt buộc
-
fetchDidFail
FetchDidFailCallback không bắt buộc
-
fetchDidSucceed
FetchDidSucceedCallback không bắt buộc
-
handlerDidComplete
HandlerDidCompleteCallback không bắt buộc
-
handlerDidError
HandlerDidErrorCallback không bắt buộc
-
handlerDidRespond
HandlerDidRespondCallback không bắt buộc
-
handlerWillRespond
HandlerWillRespondCallback không bắt buộc
-
handlerWillStart
HandlerWillStartCallback không bắt buộc
-
requestWillFetch
RequestWillFetchCallback không bắt buộc
WorkboxPluginCallbackParam
Thuộc tính
-
cacheDidUpdate
-
cacheKeyWillBeUsed
-
cacheWillUpdate
-
cachedResponseWillBeUsed
-
fetchDidFail
-
fetchDidSucceed
-
handlerDidComplete
-
handlerDidError
-
handlerDidRespond
-
handlerWillRespond
-
handlerWillStart
-
requestWillFetch
Thuộc tính
cacheNames
Lấy tên bộ nhớ đệm hiện tại và tiền tố/hậu tố mà Workbox sử dụng.
cacheNames.precache
được dùng cho các thành phần được lưu vào bộ nhớ đệm trước, cacheNames.googleAnalytics
được workbox-google-analytics
dùng để lưu trữ analytics.js
và cacheNames.runtime
được dùng cho mọi thành phần khác.
Bạn có thể sử dụng cacheNames.prefix
để chỉ truy xuất giá trị tiền tố hiện tại.
Bạn có thể dùng cacheNames.suffix
để chỉ truy xuất giá trị hậu tố hiện tại.
Loại
đối tượng
Thuộc tính
-
googleAnalytics
chuỗi
-
lưu vào bộ nhớ đệm trước
chuỗi
-
tiền tố
chuỗi
-
thời gian chạy
chuỗi
-
hậu tố
chuỗi
Phương thức
clientsClaim()
workbox-core.clientsClaim()
Xác nhận quyền sở hữu mọi ứng dụng hiện có sau khi worker dịch vụ trở nên hoạt động. Phương thức này thường được dùng kết hợp với skipWaiting()
.
copyResponse()
workbox-core.copyResponse(
response: Response,
modifier?: function,
)
Cho phép nhà phát triển sao chép một phản hồi và sửa đổi các giá trị headers
, status
hoặc statusText
của phản hồi đó (các giá trị có thể đặt thông qua đối tượng [ResponseInit
]https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax
trong hàm khởi tạo).
Để sửa đổi các giá trị này, hãy truyền một hàm làm đối số thứ hai. Hàm đó sẽ được gọi bằng một đối tượng duy nhất có các thuộc tính phản hồi {headers, status, statusText}
. Giá trị trả về của hàm này sẽ được dùng làm ResponseInit
cho Response
mới. Để thay đổi các giá trị, hãy sửa đổi(các) tham số đã truyền và trả về tham số đó hoặc trả về một đối tượng hoàn toàn mới.
Phương thức này được cố ý giới hạn ở các phản hồi cùng nguồn gốc, bất kể có sử dụng CORS hay không.
Tham số
-
phản hồi
Phản hồi
-
đối tượng sửa đổi
hàm không bắt buộc
Tham số
modifier
có dạng như sau:(responseInit: ResponseInit) => ResponseInit
-
responseInit
ResponseInit
-
returns
ResponseInit
-
Giá trị trả về
-
Promise<Response>
registerQuotaErrorCallback()
workbox-core.registerQuotaErrorCallback(
callback: Function,
)
Thêm một hàm vào tập hợp quotaErrorCallbacks sẽ được thực thi nếu xảy ra lỗi hạn mức.
Tham số
-
lệnh gọi lại
Chức năng
setCacheNameDetails()
workbox-core.setCacheNameDetails(
details: PartialCacheNameDetails,
)
Sửa đổi tên bộ nhớ đệm mặc định mà các gói Workbox sử dụng.
Tên bộ nhớ đệm được tạo dưới dạng <prefix>-<Cache Name>-<suffix>
.
Tham số
-
chi tiết
PartialCacheNameDetails
skipWaiting()
workbox-core.skipWaiting()
Phương thức này không còn được dùng nữa và sẽ bị xoá trong Workbox phiên bản 7.
Bạn nên sử dụng lệnh gọi self.skipWaiting() tương đương.