Javascript 谁的回答;正文“;无法使用“已锁定”来响应请求
我只是在google chrome中尝试服务人员。我偶然发现一个错误。在这一刻,这似乎是在未来 我不相信错误是错误。当我在firefox中尝试时,会出现内容错误屏幕。在处理项目根目录的获取事件时发生:Javascript 谁的回答;正文“;无法使用“已锁定”来响应请求,javascript,google-chrome,service-worker,Javascript,Google Chrome,Service Worker,我只是在google chrome中尝试服务人员。我偶然发现一个错误。在这一刻,这似乎是在未来 我不相信错误是错误。当我在firefox中尝试时,会出现内容错误屏幕。在处理项目根目录的获取事件时发生: self.addEventListener('fetch', function(event) { // Nice url var requestURL = new URL(event.request.url); console.log("Request for: ", requestU
self.addEventListener('fetch', function(event) {
// Nice url
var requestURL = new URL(event.request.url);
console.log("Request for: ", requestURL.href);
// Network, then cache, then fallback
event.respondWith(
// Try to download
fetch(event.request)
.then(function(x) {
console.log(" "+requestURL.href+" >> ",x);
// If failed the x will not be ok
if(x && x.ok) {
// If result was ok save it to cache
cache.put(event.request, x);
return x;
}
else
// Try to fetch cached version if request failed
return cache.match(event.request);
})
// In case of error return something like 404 page
.catch(function(error) {
console.warn(" "+requestURL.href+" >> UNAVAILABLE: ",error);
return cache.match('/page/content-not-available-offline');
})
);
});
我不确定body locked错误是什么意思,所以我甚至不知道什么代码是相关的。问题是响应的
body
(实际内容,如HTML或JavaScript)只能用于特定目的一次,例如保存到缓存中或用作实际响应
为了解决这个问题,存在一种方法
事实上,clone()
存在的主要原因是允许对对象进行多次使用(当对象仅为一次使用时)
在本例中,问题是将响应存储在缓存中,然后返回它。正确的做法是:
if(x && x.ok) {
// If result was ok save it to cache
cache.put(event.request, x.clone());
return x;
}