2

如何在 Chrome 中使用 appcached webapp 中的 browserid.org?这段代码:

<html manifest="test.appcache"><head> 

<script src="https://browserid.org/include.js"></script> 
<script> 
function test() {
    if(navigator.id){
        alert('OK!');
    } else {
        alert('Oops!');
    }
}
</script> 
</head><body onload="test();">test</body></html> 

结合 test.appcache:

CACHE MANIFEST

并使用 .htaccess:

AddType text/cache-manifest .appcache

每次在 Firefox 中刷新它时都会提示“OK”。在 Chrome 中,它会在您第一次访问它时提示“OK”,但每次您刷新它时都会提示“Oops”(即,当从 appcache 提供服务时)。

关于它未能包括的文件的一些事实:

  • 这是跨域的
  • 它通过 https 提供
  • 它有一个“Cache-Control: public, max-age=0”响应头

不过,我不明白为什么这在 FF 中有效但在 Chrome 中失败。我认为这在某种程度上与“HTTP 缓存标头和对通过 TLS 提供的缓存页面的限制被清单覆盖”有关。在http://www.w3.org/TR/html5/offline.html和/或“通过 SSL,清单中的所有资源都必须遵守同源策略。” 在http://appcachefacts.info/上,但我不明白到底是怎么回事。

我在 Ubuntu 上使用 Chromium 12.0.742.112 进行了测试。

我想一种解决方法是创建一个不支持 browserid 的可缓存应用程序,并将 browserid 登录按钮放在不在缓存清单中的 iframe 中,并带有 FALLBACK: 显示灰色的 browserid 登录按钮。但我希望也许有人有适当的解决方案。

4

1 回答 1

0

我做了一些实验,这只影响通过 http 提供的网络应用程序。因此,为了避免这种情况,只需通过 https 提供您的网络应用程序。

我认为它仍然是 Chrome 中的一个错误,但至少这是一个解决方法,所以将问题标记为已回答。

于 2011-07-23T03:17:46.233 回答