如何在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”警报,但当你下次刷新它时(即从appcache服务时),它会发出“Oops”警报。
关于它没有包括的文件的一些事实:
是交叉起源
通过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中,该iframe不在缓存清单中,并有一个回退:显示一个灰色的browserid登录按钮。但我希望有人能找到合适的解决办法。
最佳答案
我做了一些试验,这只影响通过http提供服务的web应用程序。因此,为了避免这种情况,只需通过https为您的web应用提供服务。
我认为这仍然是Chrome的一个缺陷,但至少这是一个解决方法,所以将问题标记为已回答。