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 が返されます。
欠点/提案はありますか?