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 nội dung xuống trong một tệp duy nhất.
Tuy nhiên, có sự chồng chéo 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 các lỗi có ý nghĩa và tận 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 này mà mỗi mô-đun sẽ 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ấp độ nhật ký và lưu vào bộ nhớ đệm, workbox-core
cung cấp logic nội bộ cho từng mô-đun, thay vì cho nhà phát triển cuối.
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 sẽ 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ị đã 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 cho 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 từng dự án, việc đặt tiền tố tuỳ chỉnh cho từng mô-đun sẽ ngăn các bộ nhớ đệm xung đột với nhau.
Khiếu nại của khách hàng
Một số nhà phát triển muốn có khả năng phát hành một trình chạy dịch vụ mới và yêu cầu trình chạy đó kiểm soát các trang web đã mở ngay khi trình chạy này kích hoạt. Việc này không xảy ra theo mặc định.
Nếu bạn thấy mình 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 một trình nghe sự kiện activate
vào trình chạy dịch vụ và trong trình nghe này, sẽ gọi self.clients.claim()
. Việc gọi self.clients.claim()
trước khi trình chạy dịch vụ hiện tại kích hoạt sẽ dẫn đến một ngoại lệ về 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 trình thực thi đó đúng lúc.
Ngừng sử dụng trình bao bọc ignoreWait
Trước Workbox phiên bản 6, các nhà phát triển cũng nên sử dụng phương thức skipWaiting()
của workbox-core
. Tuy nhiên, phương thức này cung cấp ít giá trị ngoài những gì nhà phát triển sẽ 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
có self.skipWaiting()
được gọi, nên trình bao bọc này 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
sẽ không đượ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 một ngoại lệ nếu được gọi vào thời điểm "sai", do đó, bạn không cần phải gói ngoại lệ này trong trình xử lý sự kiện.
Loại
CacheDidUpdateCallback()
workbox-core.CacheDidUpdateCallback(
param: CacheDidUpdateCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Promise<void>
CacheDidUpdateCallbackParam
Thuộc tính
-
cacheName
string
-
event
ExtendableEvent
-
newResponse
Phản hồi
-
oldResponse
Câu trả lời không bắt buộc
-
request
Yêu cầu
-
state
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
string
-
cachedResponse
Câu trả lời không bắt buộc
-
event
ExtendableEvent
-
matchOptions
CacheQueryOptions không bắt buộc
-
request
Yêu cầu
-
state
MapLikeObject không bắt buộc
CacheKeyWillBeUsedCallback()
workbox-core.CacheKeyWillBeUsedCallback(
param: CacheKeyWillBeUsedCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Promise<string | Request>
CacheKeyWillBeUsedCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
chế độ
string
-
params
không bắt buộc bất kỳ
-
request
Yêu cầu
-
state
MapLikeObject không bắt buộc
CacheWillUpdateCallback()
workbox-core.CacheWillUpdateCallback(
param: CacheWillUpdateCallbackParam,
)
Tham số
-
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
-
state
MapLikeObject không bắt buộc
FetchDidFailCallback()
workbox-core.FetchDidFailCallback(
param: FetchDidFailCallbackParam,
)
Tham số
-
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
-
state
MapLikeObject không bắt buộc
FetchDidSucceedCallback()
workbox-core.FetchDidSucceedCallback(
param: FetchDidSucceedCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Hứa hẹn<Phản hồi>
FetchDidSucceedCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi
-
state
MapLikeObject không bắt buộc
HandlerCallbackOptions
HandlerDidCompleteCallback()
workbox-core.HandlerDidCompleteCallback(
param: HandlerDidCompleteCallbackParam,
)
Tham số
-
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
Câu trả lời không bắt buộc
-
state
MapLikeObject không bắt buộc
HandlerDidErrorCallback()
workbox-core.HandlerDidErrorCallback(
param: HandlerDidErrorCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Hứa hẹn<Phản hồi>
HandlerDidErrorCallbackParam
Thuộc tính
-
error
Lỗi
-
event
ExtendableEvent
-
request
Yêu cầu
-
state
MapLikeObject không bắt buộc
HandlerDidRespondCallback()
workbox-core.HandlerDidRespondCallback(
param: HandlerDidRespondCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Promise<void>
HandlerDidRespondCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Câu trả lời không bắt buộc
-
state
MapLikeObject không bắt buộc
HandlerWillRespondCallback()
workbox-core.HandlerWillRespondCallback(
param: HandlerWillRespondCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Hứa hẹn<Phản hồi>
HandlerWillRespondCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
phản hồi
Phản hồi
-
state
MapLikeObject không bắt buộc
HandlerWillStartCallback()
workbox-core.HandlerWillStartCallback(
param: HandlerWillStartCallbackParam,
)
Tham số
-
tham số
Giá trị trả về
-
Promise<void>
HandlerWillStartCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
state
MapLikeObject không bắt buộc
ManualHandlerCallback()
workbox-core.ManualHandlerCallback(
options: ManualHandlerCallbackOptions,
)
Lệnh gọi lại "handler" được gọi bất cứ khi nào Router
khớp một 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ề 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, nó 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ề
-
Hứa hẹn<Phản hồi>
ManualHandlerCallbackOptions
Các tuỳ chọn được truyền vào hàm ManualHandlerCallback
.
Thuộc tính
-
event
ExtendableEvent
-
request
chuỗi | Yêu cầu
MapLikeObject
PluginState
Hiện tại, việc 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ố
-
tham số
Giá trị trả về
-
Hứa hẹn<Yêu cầu>
RequestWillFetchCallbackParam
Thuộc tính
-
event
ExtendableEvent
-
request
Yêu cầu
-
state
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 chấp nhận một trong hai cách trên.
RouteHandlerCallback()
workbox-core.RouteHandlerCallback(
options: RouteHandlerCallbackOptions,
)
Lệnh gọi lại "handler" được gọi bất cứ khi nào Router
khớp một 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ề 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, nó 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ề
-
Hứa hẹn<Phản hồi>
RouteHandlerCallbackOptions
Các tuỳ chọn được truyền vào hàm RouteHandlerCallback
.
Thuộc tính
-
event
ExtendableEvent
-
params
string[] | MapLikeObject không bắt buộc
-
request
Yêu cầu
-
url
URL
RouteHandlerObject
Đố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à có thể mở rộng (như gói workbox-strategies
thực hiện).
Thuộc tính
-
handle
RouteMatchCallback()
workbox-core.RouteMatchCallback(
options: RouteMatchCallbackOptions,
)
Lệnh gọi lại "match" (so khớp) 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 khớp diễn ra để phản hồi một sự kiện tìm nạp của ứng dụng, đối tượng event
cũng được cung cấp. Tuy nhiên, vì lệnh gọi lại so khớp có thể được gọi bên ngoài một sự kiện tìm nạp, nên logic so khớp sẽ không giả định rằng đối tượng event
sẽ luôn có sẵn.
Nếu lệnh gọi lại so khớp trả về một giá trị trung thực, RouteHandlerCallback
của tuyến trùng 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 vào 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 trong vòng đời không bắt buộc cho các thao tác tìm nạp và 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
Không bắt buộc FetchDidSucceedCallback
-
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 và tiền tố/hậu tố hiện tại mà Workbox sử dụng.
cacheNames.precache
được dùng cho các tài sản được lưu trước vào bộ nhớ đệm, cacheNames.googleAnalytics
được workbox-google-analytics
dùng để lưu trữ analytics.js
và cacheNames.runtime
dùng cho mọi nội dung 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
string
-
bộ nhớ đệm trước
string
-
tiền tố
string
-
thời gian chạy
string
-
hậu tố
string
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ó sẵn sau khi service worker hoạt động. Thuộc tính 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 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 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) thông số đã chuyển và trả về thông số đó hoặc trả về một đối tượng hoàn toàn mới.
Phương thức này được chủ động 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
sẽ có dạng như sau:(responseInit: ResponseInit) => ResponseInit
-
responseInit
ResponseInit
-
giá trị trả về
ResponseInit
-
Giá trị trả về
-
Hứa hẹn<Phản hồi>
registerQuotaErrorCallback()
workbox-core.registerQuotaErrorCallback(
callback: Function,
)
Thêm một hàm vào tập hợp cancelErrorCallbacks sẽ được thực thi nếu có lỗi hạn mức.
Tham số
-
số gọi lại
Hàm
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 dùng nữa và sẽ bị loại bỏ trong Workbox phiên bản 7.
Việc gọi Self.skipWait() tương đương và nên được sử dụng thay thế.