浏览器重新启动时HTML5脱机功能不起作用

时间:2012-02-22 02:15:32

标签: html5 offline offline-caching sammy.js

我正在使用离线HTML5功能来缓存我的网络应用程序。

它在某些时候工作正常,但在某些情况下它有奇怪的行为。我试图找出原因,以及如何解决它。

我正在使用Sammy,我认为这可能是相关的。

这是出错的时候,

  • 浏览到我的页面http://domain/App 注意:在/ App
  • 之后我没有包含斜杠
  • 然后我被sammy
  • 重定向到http://domain/App/#/
  • 一切都被缓存(包括图片)
  • 我下线了,我正在使用虚拟机,所以我拔掉虚拟网络适配器
  • 关闭浏览器
  • 我重新打开浏览器并浏览到我的页面http://domain/App/#/
  • 除了图像
  • 之外,内容正在显示

    如果在步骤#1中我浏览到http://domain/App/包括斜杠,那么一切正常。

    在没有调用sammy路径的地方还有其他一些奇怪的状态,所以页面仍然是空白的,但我无法可靠地复制它。

    ...

    更新:问题是上述步骤之前引发了问题。当我按照上述步骤进行操作时,它现在正在工作,因此很难确切说明发生了什么。我每次都从一致的状态开始,因为我是从VM中的快照开始的。

    我的缓存清单看起来像这样,

    CACHE MANIFEST
    
    javascripts/jquery-1.4.2.js
    javascripts/sammy/sammy.js
    javascripts/json_store.js
    javascripts/sammy/plugins/sammy.template.js
    
    stylesheets/jsonstore.css
    
    templates/item.template
    templates/item_detail.template
    
    images/1Large.jpg
    images/1Small.jpg
    
    images/2Large.jpg
    images/2Small.jpg
    
    images/3Large.jpg
    images/3Small.jpg
    
    images/4Large.jpg
    images/4Small.jpg
    
    index.html
    

    1 个答案:

    答案 0 :(得分:0)

    我也遇到了类似的问题。

    我认为问题的一部分是jquery ajax错误解释了响应。我相信sammy正在使用jquery来进行ajax调用,这会导致错误。

    这是我用来测试的代码片段(虽然不是解决方案)

    this.get('#/', function (context) {
    
        var uri = 'index.html';
    
        //  what i'm trying to call
        context.partial(uri, {});// fails on some browsers after initial caching
    
        //  show's that jquery's ajax is misinterpreting
        //  the response
        $.ajax({
            url:uri,
            success: function(data, textStatus, jqXHR){
                alert('success')
                alert(data);
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert('error')
                if(jqXHR.status == 0){  //  this is actually a success
                    alert(jqXHR.responseText);
                }else{
                    alert('error code: ' + jqXHR.status)    // probably a real error
                }
            }
        });