维基百科图像未从 UIWebView 中的网络存档加载

Wikipedia Images aren't loading from a webarchive in UIWebView

我正在从 UIWebView 中的网络存档(在桌面 Safari 中创建)加载一些维基百科页面。这允许页面脱机可用。

但是,由于某些原因,图像在离线时无法加载。它们似乎是从网站加载的。

过去一切正常,我注意到这个问题只影响维基百科更新其移动网站格式后创建的 new webarchives

这很奇怪,因为如果我在计算机上打开 webarchive,图像会在离线时加载,但在 iOS 中不会。

知道这里发生了什么吗?

我正在使用以下代码加载 webarchive:

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 中加载 webarchive 会导致 iOS 7 崩溃。

这是一个 link 到一个导致问题的新网络存档和一个来自旧版本维基百科的工作正常的网络存档。我已将文件扩展名更改为 "plist",以便轻松编辑它们。改回"webarchive"进行测试。

(新)https://dl.dropboxusercontent.com/u/20616325/Badger%20%28NEW%29.plist

(旧)https://dl.dropboxusercontent.com/u/20616325/Badger%20%28OLD%29.plist

即使您将页面添加为 "complete web page",其中图像和相对路径单独存储。它不会加载它们,因为它们将奇怪的代码添加到 omg 标记中,例如

<img alt=".." src="relative_path(//upload.. in the relapse)" srcset="tahat_causes_problems" data-file-width="" data-file-height="" />

srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/82/Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg/330px-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/440px-Taxidea_taxus_%28Point_Reyes%2C_2007%29.jpg 2x" data-file-width="2124" data-file-height="1416"

我用 wright 相对路径向 Xcode 项目添加了一个完整的网页,加载到 webView,没有图像。但是当我摆脱这个 srcset=".." 和其余的时,它加载得很好。

Ilnar 是正确的。扩展他的回答, iOS7 srcset support 不支持属性 srcset 这很可能是导致您看到的崩溃的原因。

Srcset 用于在一个图像标签中为不同的设备尺寸提供多个图像链接。开头有javascript 找到图片的正确src return'srcset'in new Image();

新网络存档使用此标签提供指向 3 个图像的链接。 OLD webarchive 只是使用标签指向 URL.

Srcset 应该在 iOS8 中得到支持,但维基百科似乎使用了 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 的backbone)只支持整数(1x,2x,3x)。因此,这可能导致 iOS 8 加载失败。