Регистрация ServiceWorker возвращает код AbortError: 20

Я начал играть с ServiceWorker в Google Chrome v38. Я установил #enable-experimental-web-platform-features в True в about:config и настроил свой локальный хост для обслуживания запросов через https://.

Мой файл sw.js содержит простой пример:

// The SW will be shutdown when not in use to save memory,
// be aware that any global state is likely to disappear
console.log("SW startup");

self.addEventListener('install', function(event) {
  console.log("SW installed");
});

self.addEventListener('activate', function(event) {
  console.log("SW activated");
});

self.addEventListener('fetch', function(event) {
  console.log("Caught a fetch!");
  event.respondWith(new Response("Hello world!"));
});

и мой файл app.js:

if ('serviceWorker' in navigator) {
    console.log('registering sw.js');
    navigator.serviceWorker.register('/static/js/sw.js').then(function(reg) {
        console.log('Yey!', reg);
    }, function(err) {
        console.log('Boo!', err);
    });
}

Мой вывод консоли:

registering sw.js app.js:27
Boo!
DOMException: The Service Worker installation failed. {message: "The Service Worker installation failed.", name: "AbortError", code: 20, INDEX_SIZE_ERR: 1, DOMSTRING_SIZE_ERR: 2…} app.js:31

Любые идеи, как решить эту проблему?


person daniula    schedule 23.11.2014    source источник


Ответы (3)


Пожалуйста, используйте Google Chrome 40 или более поздней версии (без chrome://flags возни) при разработке с сервисными работниками. В Chrome 38, возможно, была очень и очень предварительная поддержка некоторых API-интерфейсов сервис-воркеров, но как спецификация, так и зрелость API-интерфейсов значительно изменились по сравнению с Chrome 38. То же самое для Chrome 39.

В идеале, для целей разработки, я бы рекомендовал использовать текущую версию Google Chrome Canary. (41), так как сообщения об ошибках были улучшены с момента сокращения ветки Chrome 40, а более точные/выразительные ошибки очень помогают понять, что происходит не так.

person Jeff Posnick    schedule 24.11.2014
comment
Я использую canary (41) без изменения флага и не могу заставить его работать локально (http). - person Aleksandrenko; 05.01.2015
comment
Сервисные работники обычно работают только со страницами, обслуживаемыми через https. Однако существует исключение, которое разрешает доступ http в случае нарушения localhost. Если вы тестируете сервис-воркеров локально, убедитесь, что вы обращаетесь к контролируемой странице через URL-адрес http://localhost:<port>. - person Jeff Posnick; 05.01.2015

Я получаю эту ошибку для ServiceWorker с синтаксической ошибкой. Поскольку Chrome даже не регистрирует выборку сервисного работника на вкладке «Сеть», потребовалось некоторое время, чтобы понять, что это было причиной.

Для тех, кто еще получает эту ошибку, попробуйте на вкладке Incognito с пустым sw.js.

person Mark    schedule 08.03.2015

Кроме того, отчеты о синтаксических ошибках и поддержка Chrome DevTools в целом все еще находятся в стадии разработки для Service Workers. Пока я пишу это, Chrome 42 находится в стадии бета-тестирования.

person StormyKnight    schedule 31.03.2015