2013-05-31 13 views
8

Sto provando a creare una cache dell'applicazione HTML5 per un'app Web di grandi dimensioni (circa 2 gigabyte) che verrà utilizzata internamente su un tablet Windows 8 Professional e IE10. Qualcosa sta causando il fallimento del processo di memorizzazione nella cache, ma l'unica informazione di debug che riesco a trovare è la console F12, che indica semplicemente "Errore irreversibile di AppCache".Come posso scoprire che cosa causa AppCache Fatal Error su IE10?

ho fatto un gestore di errori e ha cercato di debug:

if (window.applicationCache) 
{ 
    var oAppCache = window.applicationCache; 
    oAppCache.onerror = function(e) { 
     alert(e); // Outputs [object Event], I use this row as a breakpoint target 
    }; 
} 

Tuttavia, e contiene alcuna informazione utile se visti con il debugger.

In base ai log del server Web, l'ultimo file richiesto prima dell'errore è un JPEG, come molti altri. Dove dovrei iniziare a cercare indizi su cosa sta causando l'errore? La pagina si nasconde bene su Firefox.

risposta

9

Ho sbattuto la testa contro lo stesso problema per un po '. Ho fatto a pezzi il mio manifest binario fino a quando ho scoperto quale riga stava causando l'errore: era la millesima riga di voci CACHE (non solo la riga 1000 del manifest).

Sembra che ci sia un limite rigido al numero di elementi che è possibile avere in una cache in IE10. Non ho trovato questo documentato da nessuna parte dopo alcuni minuti di ricerca, ma oserei dire che qualcuno più persistente potrebbe rimischiarlo.

Ho verificato che non importa quale sia il contenuto del 1000 ° articolo CACHE; IE ti impedisce semplicemente di iniziare il download della cache. Potrebbe essere una limitazione per motivi di sicurezza, l'arresto di qualcuno che inonda la cache, o l'utilizzo di un sito DoS iniettando un manifest con migliaia di voci in una pagina.

Forse prova a suddividere l'app in blocchi (oltre i sottodomini?) Con cache diverse. Potresti migliorare la user experience se è scaricata in chunk, puoi sempre automatizzare "install" reindirizzando tra una serie di cache più piccole.

+1

La divisione sottodominio è una buona idea, anche se sarebbe difficile da implementare in quanto il sito è a pagina singola. Oltre al limite di 1000 cache entry sembra esserci un limite di 50 MB e questo sembra essere il colpevole nel nostro caso. Il limite di 1000 oggetti ci avrebbe comunque morso se non fosse stato per i video enormi, quindi accetterò questa risposta. Grazie! – Kaivosukeltaja

+1

Ben avvistato. I dettagli per IE10 sono [qui] (http://technet.microsoft.com/en-us/library/jj891001.aspx) e confermano il limite di 50 MB e il massimo di 1000 risorse nel manifest. – Barrie

3

Nel caso in cui aiuti qualcuno, ho trovato un altro modo per correggere questo errore.

Se si utilizza Application Cache e si imposta l'intestazione Cache-Control per il file html con la voce cache.manifest su "Cache-Control: no-cache, no-store", si riceverà questo errore. La rimozione del flag no-store per l'intestazione Cache-Control risolverà il problema in questa istanza. Stavo cercando di utilizzare Application Cache solo per le risorse e non per la pagina html stessa, ma sfortunatamente non è quello per cui è stato progettato.

Si noti inoltre che tutti gli altri browser ignoreranno semplicemente il flag no-store per i file nel cache.manifest, mentre IE sta tecnicamente facendo la cosa giusta essendo un po 'più pedante.

5

Per la cronaca: ho avuto problemi con IE (10) dandomi AppCache Fatal Error. Si scopre IE richiede il manifesto per essere servito con il corretto tipo di contenuto, cioè

Content-Type: text/cache-manifest 

Chrome e Firefox non sono così schizzinosi.

+1

Questa era la soluzione per me. Per IIS, aggiungi '' alla sezione '' di web.config. – Seth

+0

Sembra che questo causi errori mouseenter/leave in modo angolare per qualche strano motivo – epelc

1

Internet Explorer Group Policy limita la dimensione dell'elenco risorse della cache a 1000 elementi. Questo può essere esteso cambiando questa politica. Altro può essere trovato here, parte "Imposta la dimensione massima dell'elenco risorse cache dell'applicazione".

0

Il mio problema era che IIS utilizzava il -Estensione e impostava Content-Type su x-ms-manifest. Così ho aggiunto quanto segue nel web.config - questo ha risolto il fatal error (IE 11) e l'AppCache ora funziona con HTTPS (SSL), che non ha fatto prima (solo lavorato con HTTP):

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <location path="." 
      inheritInChildApplications="false"> 
    <system.webServer> 
... 
     <staticContent> 
     <remove fileExtension=".manifest"/> 
     <mimeMap fileExtension=".manifest" mimeType="text/cache-manifest"/> 
     </staticContent> 
... 
    </system.webServer> 
    </location> 
</configuration> 
Problemi correlati