私はサービスワーカーを使用して自分のサイトの資産(HTML、JS、CSS)のキャッシュを提供しています。ChromeインストールService Worker addAllが取得できませんでした
Firefoxを使用すると、sw.jsが正しくインストールされ、必要なファイルがキャッシュされます。私がオフラインモードに入ると、私は、存在するすべてのもの(データがキャッシュされていないので正しい)でサイトスタイルを正しく取得します。
しかし、私がChromeを使用すると、私はTypeError: Failed to fetch
エラーが発生しています。なぜFirefoxで動作するので、私はこのエラーが出ているのか分かりません。さらに、fetch
イベントが発生するたびに同じエラーがスローされ、キャッシュにないアセット(およびフェッチ機能が呼び出されている)の場合はリクエストが発生します。
cache.addAll
関数に空の配列を渡すと、フェッチイベントを実際に処理しようとするまでエラーは発生しません。
私がキャッシュしているファイルはすべてlocalhostから来たもので、他の起源ではないので、クロスドメインの問題であるとは思われません。
サービスワーカーをインストールするとき、これはコンソール出力です:
サービスワーカーをインストールした後にページを更新するとき。これは、コンソール出力です:
これがされ私のサービスワーカーのコード:
const CACHE_NAME = 'webapp-v1';
const CACHE_FILES = [
'/',
'/public/app.css',
'/public/img/_sprites.png',
'/public/js/app.min.js',
'/public/js/polyfills.min.js'
];
self.addEventListener('install', event => {
console.log("[sw.js] Install event.");
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(CACHE_FILES))
.then(self.skipWaiting())
.catch(err => console.error("[sw.js] Error trying to pre-fetch cache files:", err))
);
});
self.addEventListener('activate', event => {
console.log("[sw.js] Activate event.");
event.waitUntil(
self.clients.claim()
);
});
self.addEventListener('fetch', event => {
if (!event.request.url.startsWith(self.location.origin)) return;
console.log("[sw.js] Fetch event on", event.request.url);
event.respondWith(
caches.match(event.request).then(response => {
console.info("[sw.js] Responded to ", event.request.url, "with", response ? "cache hit." : "fetch.");
return response || fetch(event.request);
}).catch(err => {
console.error("[sw.js] Error with match or fetch:", err);
})
);
});
どのような助けも素晴らしいでしょう。
いずれかのファイルに4XXまたは5XXの応答があり、Firefoxがそのスライドを許可している場合は、仕様が正しく実装されていません。 #justsayin –
CACHE_FILESのアイテムを個別に追加しようとしましたが、キャッシュファイル内の各ファイルのフェッチに失敗しました。ファイルは正常に配信されます。また、正しく配信されていない場合、オフラインモードでは資産がないため、Firefoxはページを正しく表示できません。 –
リクエストのhttpヘッダーには何が表示されますか?私は自宅でバグを再現しようとすることはできますか?このプロジェクトのgithubレポを持っていますか? –