Domanda

Sto seguendo Stephen Walther's

Application Cache Error event: Failed to parse manifest http://localhost/website/Manifest.ashx
.

e nulla è memorizzato nella cache.

da quello che ho raccolto da qui, ho un tipo-o nel mio manifest.Forse puoi vedere qualcosa che ho sbagliato e causi questo messaggio di errore.

manifest.ashx:

<%@ WebHandler Language="C#" Class="JavaScriptReference.Manifest" %>

using System;
using System.Web;

namespace JavaScriptReference {

    public class Manifest : IHttpHandler {

        public void ProcessRequest(HttpContext context) {
            context.Response.ContentType = "text/cache-manifest";
            context.Response.WriteFile(context.Server.MapPath("Manifest.txt"));
        }

        public bool IsReusable {
            get {
                return false;
            }
        }
    }
}
.

manifest.txt:

CACHE MANIFEST

CACHE:
Images/img1.jpg
Images/img2.jpg
JScript.js
Default.aspx.vb 
# Does Default.aspx.vb even need to be cached?
.

È stato utile?

Soluzione

TLDR: Non aggiungere una cache: Inserisci nel tuo manifest, non cache Code-dietro i file e assicurati di aver registrato l'httphandler nel tuo web.config

Versione lunga:

Ci sono alcune cose che devi fare per far funzionare l'app di esempio. Prima di tutto crei il tuo gestore come sopra, un esempio in c # è:

using System.Web;

namespace CacheTest
{
    public class Manifest : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/cache-manifest";
            context.Response.WriteFile(context.Server.MapPath("Manifest.txt"));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
.

Avanti È necessario registrare il gestore nel tuo web.config come:

    <configuration>
        <system.web>        
            <httpHandlers>
                <add verb="*" path="Manifest.ashx" 
                    type="CacheTest.Manifest, CacheTest" />
            </httpHandlers>
        </system.web>
    </configuration>
.

Avanti UP Creare un manifesto.txt nella radice del tuo sito Web e popolarlo. Il campione non dovrebbe avere una cache: dirigendosi dentro. Un campione di lavoro può sembrare:

CACHE MANIFEST

# v30

Default.aspx

Images/leaping-gorilla-logo.png
.

Nota che non siamo il codice cache dietro i file, solo percorsi relativi alle risorse effettive che un browser può richiedere. Infine, aggiungi un file predefinito.aspx. Ignora il codice dietro ma modifica il markup in modo che il tag html iniziale fa riferimento a HTTPhandler, il markup completo:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CacheTest.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" manifest="Manifest.ashx">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        This is a sample offline app!
    </div>
    </form>
</body>
</html>
.

Con questo fatto puoi ora avviare il tuo sito web, sfogliarlo in Firefox e ti verrà chiesto il permesso di prenderlo offline. In alternativa, accenderlo in Chrome, passare agli strumenti sviluppatori, controllare la scheda Risorse e sarà possibile visualizzare le risorse che sono state caricate nell'ambito del nodo della cache dell'applicazione:

APP offline in esecuzione in Google Chrome

E per completezza, la tua struttura del codice finita sarà simile a

Inserisci Descrizione dell'immagine qui

Altri suggerimenti

L'errore "Evento di errore della cache dell'applicazione: impossibile parse il manifest" può essere causato dalla formattazione del file di testo.

Il mio script di distribuzione ha generato il file manifest in Unicode.Il file sembrava bene in Chrome (quando si va all'URL), convalidato sui validatori online, ma genererebbe questo errore quando viene utilizzato come manifest.

Per correggere il file, basta aprire il file manifest in Blocco note e andare su "Salva-As" e selezionare UTF8.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top