2011-12-19 42 views
1

我现在专注于使用HTML5的离线Web应用程序。我来到了需要一种可靠的方法来检查用户的连接,以确定他/她目前是在线还是离线。由于我了解到navigator.onLine属性高度不可靠,因此我使用缓存清单的回退区域找到了一个非常好的方法。我从两本不同的书中实现了两个类似的解决方案,一个是“Introducing HTML5”(Lawson/Sharp)和一个“HTML5:The Missing Manual”(MacDonald)。我想这是一个HTTP缓存(我使用Apache和本地主机)的问题,我不太了解这些。我粘贴了我的代码,这是几个文件,但代码很少。HTML5:使用清单回退来检查用户的连接

从引入适合的解决方案HTML5: http://pastebin.com/UGsmnAtK

从HTML5的适应解 - 失踪手册: http://pastebin.com/8v5ck3E6

使用Chrome 16测试...

===我想要什么===

  • 用空缓存启动应用程序并运行apache
  • 点击按钮 - >警报 “在线” 显示
  • 停止Apache
  • 点击按钮 - >警报 “离线” 显示
  • 启动Apache
  • 点击按钮 - >警报 “在线”显示

===会发生什么===

介绍HTML5解决方案: - 空缓存和运行的Apache启动应用程序- 点击按钮 - >警报“在线”显示 - 停止Apache - 点击按钮 - >警报“在线”显示 - 启动Apache - 点击按钮 - >警报“在线”显示

HTML5:缺少手动解决方案: - 空缓存和运行的Apache 启动应用程序 - 点击按钮 - >警报“在线”显示 - 停止Apache - 点击按钮 - >警报“在线”显示 - 启动apache - 点击按钮 - >提示“Online”显示为

其他场景和用例也以类似的方式失败。这些书承诺您可以随时使用他们的方法检查用户的连接。所以我想我在这里做错了什么。我会很感激地接受关于这个话题的任何想法。

干杯, 菲利克斯

回答

2

的问题是,当你点击与引入HTML5或按钮online.js被加载时,页面加载与HTML5 - 缺少手动代码和站点可用通过Apache。下一次脚本未被加载,因为它已经在浏览器缓存中。

Introducing HTML5看来,如果向脚本URL添加一个随机值,它应该起作用。就像:

function testOnline(fn) { 
    var script = document.createElement('script'); 
    script.src = 'online.js?r=' + Math.random(); 

    window.setOnline = function(online) { 
     document.body.removeChild(script); 
     fn(online); 
    } 

    document.body.appendChild(script); 
} 
+0

嗨莫里斯,非常感谢你的回答,你真的帮了我很多!我只是试图添加查询字符串,它真的工作!每按一下按钮,就会在'online.js'上调用GET请求。也许我通常应该更多地了解所有这些Apache技术。在stackoverflow上的第一篇文章,立即成功!干杯,菲利克斯 – Felix 2011-12-21 19:01:25

+1

嗨菲利克斯,没有具体的Apache关于此,我只是稍微改变了网址,以避免浏览器缓存online.js。请接受答案,以帮助其他遇到此问题的人。 – Maurice 2011-12-21 19:17:38