2

我们有时会在我们的应用程序中使用 webarchives,因为这是一种非常方便的方式,可以将 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 可以正确解析,然后在网络存档中找到(因为它们与原始绝对 URL 一起存储在那里)。

然而,在 iOS 6 上,跟踪 location.href 会给出类似的 URL applewebdata://1B648BC1-F143-4245-A7AD-6424C3E3D227,因此所有相对 URL 都相对于这个 URL 进行解析,当然再也无法在 webarchive 中找到了。

我发现的一种解决方法是将与 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 回答