-
Notifications
You must be signed in to change notification settings - Fork 95
/
hc-cache.html
64 lines (62 loc) · 3.02 KB
/
hc-cache.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<html manifest="hc.appcache">
<body onerror="alert(event)">
<script>
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position){
position = position || 0;
return this.substr(position, searchString.length) === searchString;
};
}
if( !parent )
document.write("This must be loaded as frame!");
var Module = parent.window.Module;
var appCache = window.applicationCache;
var mounted = false;
var packageName = 'hc.zip';
function mountCache()
{
if( mounted ) return;
mounted = true;
Module.setStatus('Mounting cache');
var xhr = new XMLHttpRequest();
xhr.open('GET', packageName, true);
xhr.responseType = 'arraybuffer';
xhr.onerror = function(event) {
throw new Error("NetworkError");
}
xhr.onload = function(event) {
if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
parent.window.mountZIP(xhr.response);
parent.window.savedRun();
} else {
Module.print(xhr.statusText + " : " + xhr.responseURL);
}
};
xhr.send(null);
}
if( appCache )
{
var initState = appCache.status;
if( initState == 1 || initState == 2 || initState == 4 )
mountCache();
else
Module.setStatus('Cache not ready!');
Module.print("appCache status: "+ appCache.status);
// Добавляем слушателей событий
// Ресурсы уже кэшированнны. Индикатор прогресса скрыт.
appCache.addEventListener('cached', function(e) {Module.print('Appcache cached, status:' + appCache.status);mountCache();}, false);
// Начало скачивания ресурсов. progress_max - количество ресурсов. Показываем индикатор прогресса
appCache.addEventListener('downloading', function(e) {Module.setStatus('Starting download offline cache');
Module.print('Appcache downloading, status:' + appCache.status)}, false);
// Процесс скачивания ресурсов. Индикатор прогресса изменяется
appCache.addEventListener('progress', function(e) {Module.setStatus('Downloading offline cache');Module.print('Appcache progress, status:' + appCache.status); if(initState != 0 && appCache.status == 0) Module.print("appCache error detected");}, false);
// Скачивание ресурсов. Скрываем индикатор прогресса. Обновляем кэш. Перезагружаем страницу.
appCache.addEventListener('updateready', function(e) {Module.print('Appcache updateready, status:' + appCache.status);mountCache();}, false);
appCache.addEventListener('error', function(e) {Module.setStatus('Error: failed to activate caching!');}, false);
appCache.addEventListener('checking', function(e) {Module.print('Appcache checking, status:' + appCache.status); if( appCache.status == 2 ) mountCache();}, false);
}
else
Module.print("appCache not supported!");
</script>
</body>
</html>