9

我正在使用应用程序缓存并遇到 swapCache 函数的问题。

我创建了世界上最简单的缓存清单文件:

CACHE MANIFEST
# Timestamp: 2013-03-01 11:28:49

CACHE:
media/myImage.png

NETWORK:
*

第一次运行应用程序在控制台中给了我这个:

Creating Application Cache with manifest http://blah_blah/offline.appcache
Application Cache Checking event
Application Cache Downloading event
Application Cache Progress event (0 of 1) http://blah_blah/media/myImage.png
Application Cache Progress event (1 of 1)
Application Cache Cached event

到目前为止一切顺利。然后我换出图像并更改清单文件中的时间戳并获得以下信息:

Adding master entry to Application Cache with manifest http://blah_blah/offline.appcache
Application Cache Downloading event
Application Cache Progress event (0 of 2) http://blah_blah/media/myImage.png
Application Cache Progress event (1 of 2) http://blah_blah/Widget/?invoke=myWidgetFunctionName
Application Cache Progress event (2 of 2)
Application Cache UpdateReady event

此时调用 applicationCache.swapCache() 函数给我一个 DOM 异常 11 错误。

在网络服务器上正确配置的 MIME 类型。

任何人有任何想法/可以指出我正确的方向吗?(我已经在线阅读了所有常用链接的 appcache 内容,但看不出我做错了什么)

谢谢!

编辑:

正如我在下面的评论中提到的,在我的 Web 服务器上为 *.appcache 文件设置过期标头以立即过期似乎可以让它工作,尽管我仍然收到 DOM 异常错误(!?)。我发现以下博客条目可能会有所帮助: Offline App Cache INVALIDSTATEERR 的可能修复

...但我不知道如何设置 MIME 类型客户端。我的 google-Fu Skillz 抛弃了我。任何人?

4

2 回答 2

1

我遇到过同样的问题。有一段时间,如果浏览器不是 chrome,我只是禁用了缓存,但后来我决定再试一次,按照建议设置 mime-type。Firefox 在我调用 时不再抛出异常swapCache(),整个刷新过程现在按预期工作。mime-type 必须设置在服务器端,因为请求不是从您的网页发起的,而是从浏览器发起的,因此您无法控制它如何读取响应。你有几个选择。如果您使用的是 apache 或 IIS,您可以按照 koko 的建议进行操作。如果您使用的是为您处理路由的框架,并且您配置了 URL 到响应的映射,例如 rails 或 python wsgi 服务器,那么您通常可以手动设置内容类型。这是我在 Python 应用程序中使用 Bottle.py(基于 WSGI)的代码片段:

# BEFORE
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False)
def serve_cache_manifest(path):
    return bottle.static_file(path, SITE_DIR)

# AFTER
@bottle.route(r"/<path:re:.+\.(manifest|appcache)>", auth=False)
def serve_cache_manifest(path):
    return bottle.static_file(path, SITE_DIR, mimetype='text/cache-manifest')

Bottle 带有一个实用函数,可以处理我正在使用的返回静态文件。它有一个可选参数来设置 mime 类型。

tl;dr如果您无法将 mime-type 添加到您的服务器配置中,您几乎总是可以在您的服务器端代码中设置它(如果有的话)。

于 2013-10-24T22:41:26.167 回答
0

我建议尝试注释掉包罗万象的网络白名单。

NETWORK:
# *

* 似乎需要对所有文件进行网络访问,根据

https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache

我现在为我的一个简单的 Web 应用程序注释掉了所有 NETWORK 条目,它运行良好。

于 2013-08-31T23:09:06.173 回答