3

我尝试使用服务人员检测图像的错误 404。有没有办法获取图像获取的状态代码?

self.addEventListener('fetch', function(event) {

    console.log('Handling fetch event for %s', event.request.url);

    event.respondWith(
        fetch(event.request).then(function(response) {

            if (response.status == 200) {
                return response;                    
            }
            else {
                /* return some default image */
            }

        })        
    );

});

此代码适用于 html 文件,但是当它获取图像时,状态码始终为 0。有没有办法获取图像的状态码?我删除了缓存和其他所有内容以使我的示例变得简单。

这是我尝试加载的示例页面:

<body>
    <!-- This image is working -->
    <img src="http://www.google.ca/images/srpr/logo11w.png">
    <!-- This image returns 404 -->
    <img src="http://www.google.ca/images/srpr/00000.png">
</body>

所以 html 页面本身的状态是 200,但两个图像都返回状态 0。

4

2 回答 2

5

您将返回一个不透明的过滤响应,当您的请求不使用 CORS 时,这是预期的。在这种情况下, statusof0是故意模糊的——如果使用了真实的状态码,那么没有 CORS 就无法获得的信息将会泄露。

这个fetch规范问题有一些背景。

于 2015-09-02T17:48:25.610 回答
2

根据fetch spec,状态0表示错误。您可能需要检查状态消息。我的猜测是这是一个与 CORS 相关的错误,因为您是从第三方网站获取的。来自 Matt Gaunt 的Service Worker 简介

默认情况下,如果不支持 CORS,从第三方 URL 获取资源将失败。您可以在请求中添加一个非 CORS 选项来克服这个问题,尽管这会导致“不透明”响应,这意味着您将无法判断响应是否成功。

尝试mode: 'no-cors'按照他的建议进行设置。

于 2015-09-02T17:22:09.940 回答