页面加载后,Service Worker预加载子页面

时间:2016-03-31 14:12:30

标签: javascript html5 service-worker

我正在使用以下代码将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或边缘这会导致很多问题! 所有其他请求结束后,我希望有一个解决方案来开始缓存这些网站。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

您在cache.addAll()内通过WorkerGlobalScope使用的相同缓存存储API也会通过Window公开。这意味着您可以从受控页面上运行的JavaScript修改相同的缓存,并且可以等待window / document /在执行cache.addAll()之前触发的任何事件。

或者,如果要将缓存填充保留在服务工作者的install处理程序中(以确保服务工作者安装iff,例如总是填充缓存),您只需延迟调用{ {1}}直到您的网页上触发了某个特定事件。