Насколько я знаю, сервисному работнику не нужен доступ к DOM.
Вот функция, которую я использую для процесса установки сервисного работника:
var config = {
cacheName: 'v01',
staticCacheItems: [
'News/NewsItem/1',
'News/NewsItem/8',
'News/NewsItem/12',
'News/NewsItem/14'
],
};
self.addEventListener('install', onInstall);
function onInstall(event) {
event.waitUntil(caches.open(config.cacheName).then(function(cache) {
return cache.addAll(config.staticCacheItems).then(function() {
return self.skipWaiting();
});
}));
}