我们在应用程序中使用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引用的图像。
答案 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。
有任何缺点/建议吗?