我正在UIWebView中从网络档案(在桌面Safari中创建)加载一些维基百科页面。这允许页面脱机使用。
但是,由于某些原因,图像在脱机时不会加载。它们似乎是从网站上加载的。
过去一切都很好,我注意到这个问题只影响维基百科更新其移动网站格式后创建的新的网络档案。
这很奇怪,因为如果我在电脑上打开网络档案,而不是在iOS中,图像会在离线时加载。
知道这里发生了什么吗?
我正在使用以下代码加载网络档案:
NSString *fileName=[[NSString alloc] initWithFormat:@"%@", appDelegate.urlName];
NSString *htmlPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];
NSURL *url=[NSURL URLWithString:[htmlPath lastPathComponent] relativeToURL:[NSURL fileURLWithPath:[htmlPath stringByDeletingLastPathComponent] isDirectory:YES]];
[self.myWebView loadRequest:[NSURLRequest requestWithURL:url]];
更新:我还发现,在移动safari中加载从移动维基百科网站制作的网络档案会导致iOS 7崩溃。
这里有一个链接,指向一个正在引发问题的新网络档案,还有一个来自旧版本维基百科的链接,它运行良好。我已经将文件扩展名更改为"plist",这样就可以很容易地编辑它们。更改回"webarchive"进行测试。
(新增)https://dl.dropboxusercontent.com/u/20616325/Badger%20%28NEW%29.plist
(旧)https://dl.dropboxusercontent.com/u/20616325/Badger%20%28OLD%29.plist
即使您将页面添加为"完整的网页",并单独存储图像和图像的相对路径。它不会加载它们,因为它们将奇怪的代码添加到omg标签中,例如
<img alt=".." src="relative_path(//upload.. in the relapse)" srcset="tahat_causes_problems" data-file-width="" data-file-height="" />
srcset="//upload.wikipedia.org/wikipedia/commons/tumb/8/82/Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg/330px-Taxidea_taxus_/28Point_Reyes%2C_2007%29.jpg1.5x,//upload.wikimedia.org/wikipedia/commons/tumb/8/82/Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg/440px-Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg2x"数据文件宽度="2124"数据文件高度="1416"
我在Xcode项目中添加了一个完整的网页,带有wright相对路径,加载到webView,没有IMGAES。但当我去掉这个srcset=".."和其他部分时,它加载得很好。
Ilnar是正确的。在他的回答的基础上,iOS7 srcset支持中不支持属性srcset。这很可能是导致您看到的崩溃的原因。
Srcset用于为不同设备尺寸提供多个图像链接,所有这些都在一个图像标签中。开头有一个javascript,它为图像return'srcset'in new Image();
找到了正确的src
新的网络档案使用这个标签来提供3张图片的链接。OLD-webarchive只是使用标记来指向一个URL。
iOS8应该支持Srcset,但看起来维基百科使用的分辨率标签是1.5x和2x。
`srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/82/Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg/270px-Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/82/Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg/360px-Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg 2x
Webkit(Safari的主干)只支持整数(1x、2x、3x)。因此,这可能是导致iOS 8加载失败的原因。