问题标签 [application-cache]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2845 浏览

ios - 为什么以前在 iPad 上缓存时,SVG 中的图像并不总是从应用程序缓存中加载?

我们有一个允许用户查看 SVG 的 Web 应用程序。这些 SVG 通常包含使用相对 url 加载的图像。由于我们希望这是一个 iPad 的“网络应用程序”,我们还希望将它添加到 iPad 用户的主屏幕,并由 HTML 5 应用程序缓存对其进行缓存,以便用户可以离线查看这些 SVG 和相关图像。

当我们的应用程序从 iPad 主页图标加载时,应用程序缓存清单被正确读取,并且所有引用的资源都被缓存。当用户开始离线使用应用程序时,就会出现此问题。在应用程序的使用过程中,会在页面 DOM 中添加和删除 SVG。在此期间,SVG 中的某些图像无法从应用程序缓存中加载,即使它们确实存在并已缓存。相反,向服务器发出了对图像的请求,这显然失败了,因为用户不再在线。

有趣的是,在 iPad 上导航到 safari 中的页面时,似乎不会出现此问题。它似乎特定于整页网络应用程序视图,尽管我不能保证。

我可以使用这个 HTML 页面很容易地重现这一点:

这个 SVG:

SVG 引用的这张图片:

SVG 引用的图像

这个清单文件:

并按照以下步骤操作:

  1. 打开 safari 并导航到复制 html 文件的位置(我们将其托管在 Windows 2008 / IIS 服务器上)
  2. 使用“添加到主屏幕”按钮将页面添加到主屏幕。
  3. 关闭 safari 并清理 safari 缓存
  4. 从新添加的书签加载页面
  5. 等到页面完全缓存。通常大约 5-10 秒,但您可以附加到一些应用程序缓存事件以注销进度。
  6. 关闭 wifi(或您使用的任何连接方式)
  7. 从新添加的书签加载页面
  8. 请注意,页面看起来已正确缓存。使用添加和删除按钮。当您使用页面上的“添加”按钮进行添加时,您应该很快注意到这一点。SVG 中的图像资源并不总是从应用程序缓存中加载,即使它已被明确缓存。

出现问题时,您应该会看到类似于以下屏幕截图的内容

带有图像的 SVG 屏幕截图无法从应用程序缓存中加载图像

我已经检查了一些明显的事情:

  • 应用程序缓存清单具有正确的 mime 类型
  • 清单已下载
  • 清单中引用的资源已正确缓存

我的问题是:

  • 有谁知道为什么会这样?
  • 有没有解决这个问题的方法?

我已将此记录为苹果的错误,因此我将使用可能从他们那里获得的任何反馈来更新此问题!

谢谢!

安迪。

0 投票
1 回答
853 浏览

html - window.applicationCache.status always 0 in firefox

I have a website with a manifest that validates (http://manifest-validator.com/), and files are clearly downloaded since the "progress" event is fired for each file - but, window.applicationCache.status is always 0 (which mean the website does not have a cache manifest). This is in Firefox 11.

This is at first load. When i refresh the page after the manifest is donwloaded, the applicationcache status if first checking, and the idle - which is correct.

Any ideas?

0 投票
1 回答
117 浏览

html - 仅在用户需要时才缓存应用程序?

有些浏览器不会询问客户端是否要使用应用程序缓存,而只是在第一次访问时下载整个内容(例如,android 上的浏览​​器)。当应用程序缓存有很多 MB 并且客户端在移动网络上时,这可能会导致麻烦 - 这很昂贵!是否可以阻止缓存被下载?按下例如 android 上的菜单按钮不会关闭浏览器,它将在后台运行。

当客户端按下“嘿,我想离线缓存此站点”按钮时,仅添加基于 cookie 集的清单是个好主意吗?这会带来新的挑战吗?


我已经对此进行了测试,并且似乎可以正常工作。不过需要更多的测试。如果有人感兴趣,可以在大约两周内提供该网站的链接。

0 投票
1 回答
274 浏览

html - 我可以为不同的主机使用应用程序缓存回退吗?

我有示例站点:

索引.html:

appcache.manifest:

测试.js:

当我第一次在没有互联网连接的本地主机上打开站点时,我在控制台中看到“Fial”。

我可以在应用程序缓存清单后备部分中使用http://different_domain吗?如果我能做错什么?

0 投票
1 回答
290 浏览

javascript - HTML5 缓存清单异常

我尝试在我的网站上使用 applicationcach,但我遇到了一个大问题。我只想缓存 3 个文件:style.css favicon.icoscript.js.

问题是,浏览器还存储其他文件(例如 index.php)

代码是:

0 投票
1 回答
595 浏览

html - 应用缓存:按需清单?

我正在开发一个可以在线和离线使用的 Web 应用程序。用户可以选择是否下载内容。提示打开并将他重定向到包含 HTML 标记上的 manifest 属性的页面。

这就像一个魅力,浏览器​​按预期运行并下载清单中列出的所有内容并在离线模式下工作。

现在,如果用户将页面添加到他的主屏幕,在他选择下载内容之前。他显然会链接到没有清单属性的页面。

如果他选择在他的主屏幕上从 webapp 下载内容,该应用程序将拒绝在离线模式下工作。

我想这是因为最初缓存/链接到主屏幕上的文件 IOS 上缺少清单标记。


简短概述:

联机 -> Safari -> 选择下载 appcache -> 添加到主屏幕 -> 脱机 -> 从主屏幕打开 Webapp ->工作

联机 -> Safari -> 添加到主屏幕 -> 从主屏幕打开 Webapp -> 选择下载 appcache -> 脱机 -> 从主屏幕打开 Webapp ->不起作用


你会怎么处理这个?有没有办法选择主屏幕上链接的文件?我总是提供一个空的清单文件并仅为主屏幕上的版本填充它吗?我错过了一些明显的东西吗?

0 投票
2 回答
1653 浏览

ajax - HTML5 缓存清单:不成功的 ajax 调用获得回退

我有一个 HTML5 应用程序,它使用缓存清单来提供离线功能。此应用程序在联机时进行 ajax 调用,其中一些调用可以获得 403 未授权响应。

这是我的 cache.manifest 文件的底部:

如果我删除回退部分,所有接收 403 响应的 ajax 调用都会按预期工作,我可以使用 jQuery 错误处理程序检测到这一点并将用户重定向到登录表单。

但是如果存在回退部分,相同的调用会得到 200 OK 响应,回退 HTML 的内容作为正文,即使服务器回复了 403,所以我无法知道用户没有经过身份验证,必须发送到登录页面。

我在这里错过了什么吗?提前致谢

0 投票
1 回答
146 浏览

html - HTML 5 应用程序缓存 - 获取更新日期

我们计划在我们的应用程序中使用HTML 5'sApplication cache来存储静态内容和一些文档,如时间表。这个时间表每周都会更新。现在在我们的应用程序中,我们需要显示此时间表的最后更新日期。是否可以通过编程方式获取应用程序缓存中文件的创建日期或下载日期?或者有没有更好的方法(我们不想在服务器端保存任何信息)?你能告诉我吗?

0 投票
1 回答
831 浏览

html - HTML5 应用缓存更新解决方案

我可能会因为这个问题而受到一些关注,因为那里已经有很多了。

但是......每个问题都有不同的答案,没有一个有限的答案似乎是可靠的。

所以问题...如果我更新应用程序缓存清单中引用的脱机可用应用程序的文件,我如何在不更改清单的情况下强制更新清单和脱机缓存?

我希望这很清楚。为了表明我已经做了一些研究:

如何正确地使在线/离线 Web 应用程序的 HTML5 缓存清单失效?

https://stackoverflow.com/a/8211563/491044

更新缓存虽然这需要更改清单...

谢谢你们。

0 投票
1 回答
5837 浏览

html - 缓存清单:首选在线设置是什么?

我一直在寻找一种方法来缓存页面以供用户离线使用,否则正常下载页面。但是,一旦检测到缓存清单,浏览器将仅从这些缓存页面加载。

我的搜索使我登陆http://whatwg.org。关于编写缓存清单的部分引起了我的注意。这是一段摘录:

节标题

节标题更改当前节。有四个可能的部分标题:

前三个是众所周知的,但我没有听说过最后一节标题,SETTINGS:. 文档继续这样说:

目前只定义了一种设置

缓存模式设置

这由字符串“ prefer-online”组成。它将缓存模式设置为优选在线。(缓存模式默认为快速。)

这让我想知道这个prefer-online设置是否正是我想要的。我希望这个设置会告诉浏览器,如果设置为 ,它应该只加载缓存fast的页面,否则如果用户在线,则下载页面。

不幸的是,我找不到任何关于此的额外信息或解释。有没有人遇到过有关prefer-online设置的任何信息?或者关于SETTINGS:一般的部分?