2

デスクトップ上の単一のファイル内に HTML + 関連するすべての画像/CSS/スクリプト/などを保存し、それをプロジェクトに配置してから、UIWebView にそのような単一の呼び出し:

NSData *webArchiveData = /* ... Load data from a single file ... */ ;
[webView
    loadData:webArchiveData
    MIMEType:@"application/x-webarchive"
    textEncodingName:@"utf-8"
    baseURL:nil
];

ただし、これは iOS 6 では機能しなくなりました。HTML は読み込まれますが、相対 URL を介して参照される画像は表示されなくなりました。

4

1 に答える 1

2

webarchive 内の少しの JavaScript から location.href をトレースしたところ、iOS 5 以前では、これが webarchive として保存された元の HTML の URL であることがわかりました。これはベース URL として機能していたため、HTML から参照されたリソース (画像など) の相対 URL は適切に解決され、Web アーカイブ内で見つかりました (それらは元の絶対 URL と共にそこに保存されているため)。

ただし、iOS 6 では、location.href をトレースすると のような URLが得られるapplewebdata://1B648BC1-F143-4245-A7AD-6424C3E3D227ため、すべての相対 URL はこの URL を基準にして解決され、もちろん Web アーカイブでは見つかりません。

私が見つけた回避策の 1 つは、次のように、nil 以外のものを loadData:MIMEType:textEncodingName:baseURL: に渡すことです。

[webView
    loadData:serializedWebArchive
    MIMEType:@"application/x-webarchive"
    textEncodingName:@"utf-8"
    baseURL:[NSURL URLWithString:@"file:///"] // Passing nil here won't work on iOS 6
];

これは iOS 6 と iOS 5 の両方で動作し、location.href をダンプすると、以前と同じ元の HTML の絶対 URL が返されます。

欠点/提案はありますか?

于 2012-09-28T20:55:03.687 に答える