我正在使用以下代码将ServiceWorker的HTML代码添加到HTML页面:
self.addEventListener("install", function (e) {
e.waitUntil(
caches.open("myCache").then(function (cache) {
return cache.addAll([
"p1.html",
"p2.html"]);
})
);
});
现在我想预加载一些页面,以获得更好的侧载性能。这是我的代码,工作正常:
Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: No current window
JavaScript stack:
Error: No current window
at checkForExtensionError (chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/background.js:14:17)
at Object.callback (chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/background.js:67:5)
at safeCallbackApply (extensions::sendRequest:21:15)
at handleResponse (extensions::sendRequest:72:7)
(Session info: chrome=49.0.2623.110)
但是如果服务脚本可用,则会立即加载子页面。在throtteling网络连接到gprs或边缘这会导致很多问题! 所有其他请求结束后,我希望有一个解决方案来开始缓存这些网站。
有办法做到这一点吗?
答案 0 :(得分:3)
您在cache.addAll()
内通过WorkerGlobalScope
使用的相同缓存存储API也会通过Window
公开。这意味着您可以从受控页面上运行的JavaScript修改相同的缓存,并且可以等待window
/ document
/在执行cache.addAll()
之前触发的任何事件。
或者,如果要将缓存填充保留在服务工作者的install
处理程序中(以确保服务工作者安装iff,例如总是填充缓存),您只需延迟调用{ {1}}直到您的网页上触发了某个特定事件。