我有一个简单的测试网站https://service-worker-test.app.baqend.com/,它显示 200 张图像并排放置。它注册了一个非常简单的服务工作者。HTML 如下所示:
<html>
<style>
img {
width: 50px;
width: 50px;
float: left;
padding: 5px;
}
</style>
<head>
<title>Service Worker Test</title>
<script type="text/javascript">
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js');
}
</script>
</head>
<body>
<div class="row">
<img src="/img/1.jpg"/>
<img src="/img/2.jpg"/>
...
<img src="/img/200.jpg"/>
</div>
</body>
</html>
service worker 只包含一个 fetch 事件的处理程序,它打印出它看到的请求的 url:
self.addEventListener('fetch', (event) => {
console.log('fetching: ' + event.request.url);
});
而已。现在chrome 中的第一次加载安装了 service worker。当我进行第二次加载时,服务人员将 HTML 请求和所有 200 个图像请求打印到控制台,如下所示:
fetching: https://service-worker-test.app.baqend.com/
fetching: https://service-worker-test.app.baqend.com/img/1.jpg
fetching: https://service-worker-test.app.baqend.com/img/2.jpg
fetching: https://service-worker-test.app.baqend.com/img/3.jpg
....
fetching: https://service-worker-test.app.baqend.com/img/200.jpg
如果我选中网络选项卡中的禁用缓存复选框,所有进一步的加载都会做同样的事情(确保在每次加载后清除控制台)。
现在的问题是:当浏览器缓存未禁用时,在几次加载后,服务工作者将只打印以下内容:
fetching: https://service-worker-test.app.baqend.com/
没有别的了。同样在调试 service worker 时,在 fetch 事件监听器中只处理 HTML 请求。
我的问题是为什么 chrome 中的服务人员在从浏览器缓存提供请求时看不到请求?
顺便提一句。该代码在 Firefox 中运行良好。
我在 Mac OS 版本 10.11.6 (15G1421) 上使用 Chrome 版本 59.0.3071.86