应用程序缓存:不要在404上从appcache提供文件

pky*_*eck 3 html5 offline html5-appcache

我正在使用应用程序缓存使我的网站也脱机工作.
我的清单看起来像这样,并使用以下内容嵌入<iframe>:

CACHE:
favicon.ico
assets/css/style.css
assets/js/libs/zepto.js
assets/js/app.js

NETWORK:
*

FALLBACK:
/ offline.html
Run Code Online (Sandbox Code Playgroud)

当我切断互联网连接时,它按预期工作 - >所有内容都通过offline.html页面提供.
但刚才我发现每个404(例如服务器上从未存在的URL)也使用清单中的FALLBACK部分显示offline.html.

有没有办法区分离线(在这种情况下,offline.html是正确的选择)和服务器返回404(在这种情况下,我只是想显示404错误)?

Jaf*_*ake 6

如果原始请求,Appcache将FALLBACK ...

...导致重定向到具有另一个来源的资源(指示强制网络门户),或4xx或5xx状态代码或等效,或者是否存在网络错误

(来自http://www.whatwg.org/specs/web-apps/current-work/multipage/offline.html#changesToNetworkingModel)

不幸的是,当发生回退时,没有理由找出原因.您无法区分500,404,重定向或失败的连接.

这是一个hacky解决方法:

FALLBACK:
/connection-test.js connection-failed.js
/ offline.html
Run Code Online (Sandbox Code Playgroud)

您可以在offline.html页面中嵌入connection-test.js.connection-test.js loading表示用户有连接,connection-failed.js表示没有连接.