Cachestorage.open () возвращает undefined в chrome

У меня есть сервисный работник на моем хобби-сайте с обработчиком событий install, который выглядит так (на TypeScript):

/**
 * When the service worker is being intalled, download the required assets into a temporary cache
 * @param e The intall event
 */
function installHander(e: ExtendableEvent): void {
    "use strict";
    // Put updated resources in a new cache, so that currently running pages
    // get the current versions.
    e.waitUntil(caches.delete("core-waiting").then(() => {
        return caches.open("core-waiting").then((core) => {
            const resourceUrls = [
                "/",
                "/loading/",
                "/offline/",
                "/css/site.css",
                "/js/site.js"
            ];

            return Promise.all(resourceUrls.map((key) => {
                // Make sure to download fresh versions of the files!
                return fetch(key, { cache: "no-cache" })
                .then((response) => core.put(key, response));
            }))
            // Don't wait for the client to refresh the page (as this site is designed not to refresh)
            .then(() => (self as ServiceWorkerGlobalScope).skipWaiting());
        });
    }));
}

В Firefox это работает нормально, но Chrome 65 возвращает undefined из caches.open("core-waiting"), поэтому выдает ошибку, когда я пытаюсь вызвать put на core. Согласно документам, это должно быть невозможно. Есть идеи, что здесь происходит?

1
0
660
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Оказывается, окно Google Chrome, открываемое Visual Studio, не может использовать API кеширования и просто молча возвращает undefined. Если вы открываете окно Chrome вручную, оно работает нормально.

Об этом действительно должно быть предупреждение консоли, чтобы разработчики не тратили время на то, чтобы ломать голову об этом ...

Я искал решение этой проблемы со вчерашнего дня, вы избавили меня от тонны головной боли. Большое спасибо!

Bobby Nicholls 04.04.2019 17:50

На самом деле это связано с этой ошибкой Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=1054541

По сути, переключатель --user-data-dir, который устанавливает Visual Studio, является «слишком длинным» и нарушает работу API кеша сервис-воркера в Chrome.

Вы должны иметь возможность обойти это в Visual Studio, используя параметр «Обзор с ...», чтобы настроить запуск Chrome без настраиваемого --user-data-dir (или установить свой собственный).

Другие вопросы по теме