2014-11-23 82 views
2

我已经开始在Google Chrome v38中使用ServiceWorker。我已将#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

与服务人员一起开发时,请使用谷歌浏览器40或更高版本(无需拨打chrome://flags)。 Chrome 38可能对某些服务工作者API有一些非常非常初步的支持,但从Chrome 38开始,API的规格和成熟度都发生了显着变化。Chrome 39的同上。

理想情况下,为了开发目的,我实际上推荐使用当前的Google Chrome Canary(41),因为自从Chrome 40分支被删除以来,出现了一些对错误消息的增强,而更准确/表达的错误在帮助我们找出问题的原因时有很大的帮助。

+0

我正在使用金丝雀(41)没有修改标志,并且无法使其在本地工作(http)。 – Aleksandrenko 2015-01-05 14:07:17

+0

服务人员通常只会在通过“https”服务的页面上工作。但是,有一种豁免会允许在与'localhost'相对时使用'http'访问。如果您在本地测试服务人员,请确保您通过“http:// localhost:”URL访问受控页面。 – 2015-01-05 14:52:29

+0

它在本地工作,我打破了实施。 :) – Aleksandrenko 2015-01-06 09:04:52

1

我一直在ServiceWorker出现语法错误的错误。由于Chrome甚至没有在“网络”选项卡中记录服务工作者提取,所以花了一段时间才意识到这是原因。

对于获取此错误的其他人,请在隐身标签中尝试使用空的sw.js.

0

另外,服务人员仍在为语法错误和Chrome DevTools支持进行报告。当我写这篇文章时,Chrome 42处于测试阶段。