1+ <script >
2+ (function () {
3+ // ################################
4+
5+ var updateReadyInterval;
6+ var updatingFired;
7+ var downloadingInterval;
8+ var obsoleteInterval;
9+ var cleanUpTimer;
10+
11+ applicationCache.addEventListener(' updateready' , onUpdateReadyEvent);
12+ applicationCache.addEventListener(' cached' , onInstalledEvent);
13+ applicationCache.addEventListener(' obsolete' , onObsoleteEvent);
14+
15+ applicationCache.addEventListener(' downloading' , onDownloadingEvent);
16+ applicationCache.addEventListener(' progress' , onDownloadingEvent);
17+
18+
19+ switch (applicationCache.status) {
20+ case applicationCache.DOWNLOADING: {
21+ setTimeout(onDownloadingEvent, 1);
22+ } break ;
23+ case applicationCache.OBSOLETE: {
24+ setTimeout(onObsoleteEvent, 1);
25+ } break ;
26+ case applicationCache.UPDATEREADY: {
27+ setTimeout(onUpdateReadyEvent, 1);
28+ } break ;
29+
30+ default : {
31+ downloadingInterval = setInterval(function() {
32+ if (applicationCache.status === applicationCache.DOWNLOADING) {
33+ onDownloadingEvent();
34+ }
35+ } , 50);
36+
37+ obsoleteInterval = setInterval(function() {
38+ if (applicationCache.status === applicationCache.OBSOLETE) {
39+ onObsoleteEvent();
40+ }
41+ } , 50);
42+
43+ updateReadyInterval = setInterval(function() {
44+ if (applicationCache.status === applicationCache.UPDATEREADY) {
45+ onUpdateReadyEvent();
46+ }
47+ } , 50);
48+ }
49+ }
50+
51+ cleanUpTimer = setTimeout(function() {
52+ cleanUp();
53+ } , 5000);
54+
55+ // ###############################
56+
57+ function onDownloadingEvent() {
58+ if (! updatingFired) {
59+ updatingFired = true ;
60+ onUpdating();
61+ }
62+
63+ downloadingCleanUp();
64+ }
65+
66+ function onUpdateReadyEvent() {
67+ if (! updatingFired) {
68+ updatingFired = true ;
69+ onUpdating();
70+ setTimeout(onUpdateReady, 1);
71+ } else {
72+ onUpdateReady();
73+ }
74+
75+ cleanUp();
76+ }
77+
78+ function onInstalledEvent() {
79+ onInstalled();
80+ cleanUp();
81+ }
82+
83+ function onObsoleteEvent() {
84+ onUpdateFailed();
85+ setTimeout(onUninstalled, 1);
86+ cleanUp();
87+ }
88+
89+ function downloadingCleanUp() {
90+ if (downloadingInterval) {
91+ clearInterval(downloadingInterval);
92+ downloadingInterval = null;
93+ }
94+
95+ applicationCache.removeEventListener(' downloading' , onDownloadingEvent);
96+ applicationCache.removeEventListener(' progress' , onDownloadingEvent);
97+ }
98+
99+ function cleanUp() {
100+ if (cleanUpTimer) {
101+ clearTimeout(cleanUpTimer);
102+ cleanUpTimer = null;
103+ }
104+
105+ downloadingCleanUp();
106+
107+ applicationCache.removeEventListener(' updateready' , onUpdateReadyEvent);
108+ applicationCache.removeEventListener(' cached' , onInstalledEvent);
109+ applicationCache.removeEventListener(' obsolete' , onObsoleteEvent);
110+
111+ if (updateReadyInterval) {
112+ clearInterval(updateReadyInterval);
113+ updateReadyInterval = null;
114+ }
115+
116+ if (obsoleteInterval) {
117+ clearInterval(obsoleteInterval);
118+ obsoleteInterval = null;
119+ }
120+ }
121+
122+ // ################################
123+ } ());
124+
125+ function onUpdating () {
126+ sendEvent(' onUpdating' );
127+ }
128+
129+ function onUpdateReady () {
130+ sendEvent(' onUpdateReady' );
131+ }
132+
133+ function onUpdateFailed () {
134+ sendEvent(' onUpdateFailed' );
135+ }
136+
137+ function onUninstalled () {
138+ sendEvent(' onUninstalled' );
139+ }
140+
141+ function onInstalled () {
142+ sendEvent(' onInstalled' );
143+ }
144+
145+ function sendEvent (event ) {
146+ window.parent.postMessage(' __offline-plugin_AppCacheEvent:' + event, ' *' );
147+ }
148+ </script >
0 commit comments