- 我正在嘗試使用脫機第一策略構建PWA。
- 源文件的服務器是NodeJS服務器。
- 我目前正在測試這個在本地主機節點服務器(不確定它有影響嗎?)。
- 服務人員+緩存看起來不錯,但處於離線模式我只收到Chrome離線頁面。
讓我們來看看細節:服務工作人員不在離線模式下使用節點js服務器
其供應(通過http://localhost:8080/place/test網址)頁面有一些客戶端的JS,我在其中註冊服務工作者:
client.js
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register(rootPath+'/js/service-worker.js')
.then(function() { console.log('Service Worker Registered'); });
}
服務worker.js(基於谷歌PWA教程)
var cacheName = 'myCacheVersion';
var filesToCache = [
'../',
'../place/test',
'../js/client.js',
'../js/service-worker.js',
"../css/style.css"
];
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);
})
);
});
在開發工具控制檯,一切似乎很動聽:
- 的SW註冊
- 緩存包含我想緩存的元素
但是當我檢查離線模式複選框並刷新我的網頁網址:http://localhost:8080/place/test,我只獲得Google Chrome離線網頁。
=>我在那裏錯過了什麼?(它有對的NodeJS做?與本地主機的環境?我的執行?)
我一直是這樣一個,而現在有點掙扎......
我已經檢查了「應用程序「選項卡和我的服務工作人員顯示爲激活並正在運行。
注:如果發現了類似的問題在這裏,但沒有令人滿意的答案在那裏:Service worker not run in offline mode using nodejs server
你說SW已註冊; (如同你對鏈接到的其他問題的評論一樣)是否顯示在「應用程序」選項卡中? –
是的,它顯示爲「激活並正在運行」 –