3

私はStephenWaltherのガイドに従っており、すべてがエラーなしでビルドされます。ただし、Chromeでアプリケーションを実行すると、次のエラーメッセージが表示されます。

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

そして、何もキャッシュされません。

ここから集めたものから、マニフェストにタイプOがあります。たぶん、私が間違ったことをして、このエラーメッセージを引き起こしているのを見ることができます。

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?
4

2 に答える 2

2

TLDR:マニフェストにCACHE:エントリを追加しないでください。コードビハインドファイルをキャッシュしないでください。また、Web.ConfigにHttpHandlerを登録したことを確認してください。

ロングバージョン:

サンプルアプリを機能させるために必要なことがいくつかあります。まず、上記のようにハンドラーを作成します。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;
            }
        }
    }
}

次に、次のようにweb.configにハンドラーを登録する必要があります。

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

次に、WebサイトのルートにManifest.txtを作成し、データを入力します。サンプルにはCACHEが含まれていてはなりません:その中に向かっています。動作するサンプルは次のようになります。

CACHE MANIFEST

# v30

Default.aspx

Images/leaping-gorilla-logo.png

コードビハインドはキャッシュせず、ブラウザが要求する可能性のある実際のリソースへの相対パスのみをキャッシュすることに注意してください。最後に、Default.aspxファイルを追加します。背後のコードを無視しますが、最初のHTMLタグが完全なマークアップであるHttpHandlerを参照するようにマークアップを編集します。

<%@ 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>

これが完了すると、Webサイトを起動し、FireFoxで参照すると、オフラインにする許可が求められます。または、Chromeで起動し、開発者ツールに切り替えて、[リソース]タブを確認すると、[アプリケーションキャッシュ]ノードの下に読み込まれているリソースを確認できます。

GoogleChromeで実行されているオフラインアプリ

完全を期すために、完成したコード構造は次のようになります。

ここに画像の説明を入力してください

于 2013-10-17T19:47:03.517 に答える
1

「アプリケーションキャッシュエラーイベント:マニフェストの解析に失敗しました」というエラーは、テキストファイルのフォーマットが原因で発生する可能性があります。

私の展開スクリプトは、Unicodeでマニフェストファイルを生成しました。ファイルはChromeでは正常に見え(URLにアクセスすると)、オンラインバリデーターで検証されましたが、マニフェストとして使用するとこのエラーが発生します。

ファイルを修正するには、メモ帳でマニフェストファイルを開き、[名前を付けて保存]に移動して[UTF8]を選択します。

于 2015-04-14T05:51:49.753 に答える