html 5 appcache用户控制更新

问题描述:

我正在研究一个将接收每月更改的ipad webapp。 但是我不知道如何让用户决定更新缓存或不。 ipad往往会在清单文件发生变化时进行更新并进行更新。我想阻止这种情况,以便尚未完成阅读本月问题的用户可以在他们感觉喜欢时进行更新。我已经搜索了这个问题的解决方案,但我找不到任何可用的信息。html 5 appcache用户控制更新

我的应用程序设置的方式是我有一个内容页面从数据库中提取数据,所有其他文件(从添加到内容页面的媒体开始)是静态的。

我有一个cache.manifest与其中的每个文件和一个版本号自动更改在评论顶部的更新。

因此,对内容的更新意味着新的清单,这意味着updateReady事件被触发。如果任何人都可以给我任何关于如何捕捉这些信息并避免它自动切换到新版本的指示,那会很好。

谢谢!

如何停止应用程序更新?

一旦应用程序离线它仍然缓存,直到发生以下情况之一:

  • 用户清除其浏览器的数据存储为您的网站。
  • 清单文件被修改。注意:更新清单中列出的文件并不意味着浏览器将重新缓存该资源。清单文件本身必须交替。
  • 应用程序缓存以编程方式更新。

http://www.html5rocks.com/tutorials/appcache/beginner/#toc-updating-cache

简而言之:不要修改清单文件。

如何分别为每个用户更新清单文件?

如果用户访问网站的第一次,他的浏览器加载当前清单,所以我们会使用动态URL和动态生成清单文件:

<html manifest="manifest.php?version=2"> 

浏览器记住网址manifest.php?version=2和生成的清单文件中的每个时间保持相同,所以浏览器不会更新(清单文件未修改)。 脚本将文件看起来像:

<?php 

    header ("Content-Type: text/cache-manifest") ; 

    echo "CACHE MANIFEST\n\n" ; 

    echo "# version " . $_GET [ "version" ] . "\n" ; 

    echo "index.php\n" ; 
    echo "styles.css\n" ; 
    echo "scripts.js\n" ; 

?>  

现在,如何强制浏览器加载清单形式另一个URL,例如manifest.php?version=5

我试图更改manifest属性内容并致电window.applicationCache.update() 但浏览器请求清单文件从旧URL。

另一种方式可能是:

  • 询问用户,如果他/她想要更新;
  • 如果是,则保存cookie(“wish_to_update = 1”);
  • 在manifest.php中读取cookie并检查用户是否希望更新;
在manifest.php

if ($_COOKIE [ "wish_to_update" ] == "1") 
{ 
    // generate modified version 
    echo "# version another than in your URL" ; 
    setcookie ("wish_to_update", "0") ; 
} 
else 
{ 
    // generate unmodified version 
    echo "# version " . $_GET [ "version" ] . "\n" ; 
} 
  • 修改清单文件,将强制浏览器重新下载的所有资源。
+0

缓存工作正常,这不是问题。问题是我不希望它在清单更改时自动更新,而是询问用户他/她是想更新还是继续使用当前版本。 – 2011-05-30 14:49:43

+0

这究竟会如何让设备自动更新? – 2011-05-30 14:53:56

+0

@Thomas清单文件依赖于'version'属性,所以如果URL是'manifest.php?version = 3',那么生成的文件对于该版本总是相同的。你可以询问用户他/她是否想要更新内容,如果是,则更改为'version = 4'或其他。 – atlavis 2011-05-30 14:56:17