如何在 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 登录按钮。但我希望也许有人有适当的解决方案。