iOS 6上的UIWebView不显示webarchives中具有相对URL的图像

时间:2012-09-28 20:55:04

标签: uiwebview mobile-safari ios6 webarchive

我们在应用程序中使用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引用的图像。

1 个答案:

答案 0 :(得分:2)

我从webarchive中的一些JavaScript跟踪location.href,发现在iOS 5及更低版本中,这是保存为webarchive的原始HTML的URL。它用作基本URL,因此可以正确解析从HTML(图像等)引用的资源的相对URL,然后在webarchive中找到它们(因为它们存储在原始绝对URL中)。

在iOS 6上,但跟踪location.href会提供applewebdata://1B648BC1-F143-4245-A7AD-6424C3E3D227之类的网址,因此所有相对网址都会相对于此网址进行解析,当然也无法在网络存档中找到。

我发现的一个解决方法是将不同于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。

有任何缺点/建议吗?