https://browserid.org/include.js не работает в Chrome с манифестом appcache html5
Как я могу использовать browserid.org из appcached веб-приложения в Chrome? Этот код:
<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. В Chrome он будет предупреждать "ОК" при первом посещении, но "Ой" каждый раз, когда вы обновляете его (т. Е. Когда он подается из кэша приложений).
Некоторые факты о файле, который он не может включить:
- это перекрестное происхождение
- он подается через https
- он имеет заголовок ответа "Cache-Control: public, max-age=0"
Тем не менее, я не совсем понимаю, почему это работает в FF, но не работает в Chrome. Я думаю, это как-то связано с тем, что "заголовки кэша HTTP и ограничения на страницы кэширования, обслуживаемые через TLS, переопределяются манифестами". на http://www.w3.org/TR/html5/offline.html и / или "По протоколу SSL все ресурсы в манифесте должны соответствовать политике одного источника". на http://appcachefacts.info/ но я не понимаю, как именно.
Я тестировал с Chromium 12.0.742.112 на Ubuntu.
Я полагаю, что одним из обходных путей было бы создание кешируемого приложения без поддержки browserid и помещение кнопки входа в browserid в iframe, которого нет в манифесте кэширования, с FALLBACK: который отображает заштрихованную кнопку входа в систему browserid. но я надеялся, что у кого-то есть правильное решение.
1 ответ
Я немного поэкспериментировал, и это касается только веб-приложений, которые обслуживаются через http. Поэтому, чтобы избежать этого, просто обслуживайте свое веб-приложение через https.
Я думаю, что это все еще ошибка в Chrome, но, по крайней мере, это обходной путь, поэтому отметьте вопрос как ответ.