【发布时间】:2019-07-17 09:59:04
【问题描述】:
我正在尝试使我的网站脱机运行,但它似乎不起作用。 我的项目是基于node.js,外部js文件由angular生成。
似乎一切正常,当服务器正在运行并且我转到 localhost:3000 时,服务工作者已正确安装,然后如果我转到 Chrome Devtools 中的“应用程序”选项卡,然后检查“离线”和我重新加载页面,它也可以工作。
但如果我关闭服务器并重新加载页面,我会在控制台中收到以下错误:An unknown error occurred when fetching the script.
这是我的 index.html:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel='stylesheet' href='/stylesheets/style.css' />
<link rel="icon" type="image/x-icon" href="/dist/favicon.ico">
<link href="/dist/assets/fontawesome.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500&display=swap" rel="stylesheet">
</head>
<body>
{% block body %}{% endblock %}
</body>
<script src="/client.js"></script>
<script src="/service-worker.js"></script>
<script src="/dist/runtime-es2015.js" type="module"></script>
<script src="/dist/polyfills-es2015.js" type="module"></script>
<script src="/dist/runtime-es5.js" nomodule></script>
<script src="/dist/polyfills-es5.js" nomodule></script>
<script src="/dist/styles-es2015.js" type="module"></script>
<script src="/dist/styles-es5.js" nomodule></script>
<script src="/dist/vendor-es2015.js" type="module"></script>
<script src="/dist/main-es2015.js" type="module"></script>
<script src="/dist/vendor-es5.js" nomodule></script>
<script src="/dist/main-es5.js" nomodule></script>
</body>
</html>
client.js:
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('./service-worker.js')
.then(function() { console.log('Service Worker Registered'); });
}
service-worker.js:
var cacheName = 'myCacheVersion';
var filesToCache = [
'/dist/favicon.ico',
'/dist/runtime-es2015.js',
'/dist/polyfills-es2015.js',
'/dist/runtime-es5.js',
'/dist/polyfills-es5.js',
'/dist/styles-es2015.js',
'/dist/styles-es5.js',
'/dist/vendor-es2015.js',
'/dist/main-es2015.js',
'/dist/vendor-es5.js',
'/dist/main-es5.js',
'/client.js',
'/service-worker.js',
];
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Install');
e.waitUntil(
caches.open(cacheName).then(function(cache) {
console.log('[ServiceWorker] Caching app shell');
return cache.addAll(filesToCache);
})
);
});
self.addEventListener('activate', function(e) {
console.log('[ServiceWorker] Activate');
e.waitUntil(
caches.keys().then(function(keyList) {
return Promise.all(keyList.map(function(key) {
if (key !== cacheName) {
console.log('[ServiceWorker] Removing old cache', key);
return caches.delete(key);
}
}));
})
);
return self.clients.claim();
});
self.addEventListener('fetch', function(e) {
console.log('[ServiceWorker] Fetch', e.request.url);
e.respondWith(
caches.match(e.request).then(function(response) {
return response || fetch(e.request);
})
);
});
知道为什么它不起作用吗?
【问题讨论】:
-
检查网络标签,哪个脚本加载失败。
-
无法获取我所在的路线 (localhost:3000/login)
-
是的,添加您的控制台和网络选项卡的屏幕截图
-
我已将它们添加到帖子中
-
你要杀死运行在 3000 上的服务器吗?
标签: node.js angular service-worker offline offline-caching