1

好吧,我到处搜索,但我的情况没有任何运气。我正在使用 UIWebView 使用以下代码加载我的网页:

NSString *fullURL;
fullURL=@"http://domain.com";
NSURL *url=[NSURL URLWithString:fullURL];
NSURLRequest *requestObj=[NSURLRequest requestWithURL:url];
[_webView loadRequest:requestObj];

我想加载远程 HTML 文件,但从捆绑资源中加载图像。HTML 文件如下所示:

<img src="http://domain.com/images/image.png" width="20px" height="20px"/>

这可以做到吗?互联网上的大多数帖子(和这里)都是用于加载带有本地图像/资源的本地 HTML,这在我的情况下是不同的。

我的代码有什么帮助吗?谢谢

4

3 回答 3

1

使用一些更“松散耦合”的解决方案可能会更好 - 不要以某种hacky方式编辑HTML代码本身(regexp,而不是regexp......手动更改HTML代码仍然很hacky)。

事实上,我相信这是可以做到的。iOS 只需要以某种方式被告知某些资产可以从捆绑包中离线使用。

基本上,当 UIWebView 加载页面时,在后台发生的第一件事就是下载主 *.html 页面。然后正在下载所有图形/css'es/js'es 等。

您可以让 html 文件“按原样”下载,但拦截那些将下载图形(+其他资产)的请求并从本地包中提供它们。请参考这篇文章:

http://robnapier.net/blog/offline-uiwebview-nsurlprotocol-588

并应用适当的更改。这里最大的胜利是从 webview(以及通过 JavaScript 加载/维护的代码调用它的内容)的角度来看 - 没有任何改变。只有自定义的 NSURLProtocol 本身知道某些数据是从本地存储加载的。

于 2013-04-21T02:53:57.073 回答
1

有完全相同的问题。子类化 NSURLCache 以将缓存重定向到缓存来自本地存储的图像就像一个魅力。

这是我关注的文章:http: //www.cocoawithlove.com/2010/09/substituting-local-data-for-remote.html

于 2015-10-09T19:04:52.687 回答
0

TL;DR复杂,尽可能避免,但可能。

如果您仍然想这样做:不要UIWebView :loadRequest在 URL 本身上执行 a,因为它会非常快速地触发下载图像的开始,因此使用 Javascript 修改图像源可能会为时已晚。

相反,您必须做的是在本机端下载 URL 的内容并在那里迭代图像标签以替换源(相当复杂,不要使用正则表达式来解析 HTML btw,有用于此的) ,然后使用 . 注入修改后的 HTML UIWebView loadHTMLString:baseURL:

于 2013-04-18T09:44:25.450 回答