2014-11-23 4 views
2

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

Мой 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 

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

ответ

2

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

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

+0

Я использую канарейку (41) без модификации флага и не могу заставить ее работать локально (http). – Aleksandrenko

+0

Работники службы обычно работают только на страницах, обслуживаемых через 'https'. Тем не менее, существует исключение, которое позволит использовать доступ 'http', если вы идете против' localhost'. Если вы тестируете рабочих-служб локально, убедитесь, что вы обращаетесь к контролируемой странице с помощью URL-адреса http: // localhost: . –

+0

Он работает локально, я нарушил реализацию. :) – Aleksandrenko

1

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

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^