【问题标题】:UIwebview loading remote html with bundle/local imagesUIwebview 加载带有捆绑/本地图像的远程 html
【发布时间】:2013-04-18 08:32:43
【问题描述】:

好吧,我到处搜索,但我的情况没有任何运气。 我正在使用 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,这在我的情况下是不同的。

对我的代码有帮助吗? 谢谢

【问题讨论】:

  • 您可以尝试解析 innerHTML 以查找捆绑图像链接,然后使用 base64 内容修改适当的 img 标签:stackoverflow.com/a/10713277/792677。我认为这不是一个好的解决方案,但至少是这样。

标签: ios uiwebview


【解决方案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 本身知道某些数据是从本地存储加载的。

【讨论】:

  • 不错的观点。我会尝试一下,所以我的结果。感谢您的建议。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    您必须做的是在本机端下载 URL 的内容并在那里迭代图像标签以替换源(相当复杂,don't use Regular Expressions to parse HTML btw,有libraries),然后使用 UIWebView loadHTMLString:baseURL: 注入修改后的 HTML。

    【讨论】:

    • 我明白了!如果我理解正确,我应该避免它,根据你和 A-Live。我这样做的主要原因是优化我的应用程序以更快地加载内容。所以我认为我应该以不同的方式处理这个问题。谢谢,我会等一下看看其他用户的建议。
    • 无论如何,您都将在分离线程上加载和解析文件内容(避免 UI 冻结),作为用户,我希望看到没有图像显示的文档并让它们加载(或者更确切地说让我识别文档并在加载之前将其保留)。
    • @Theodoros80 是的,你理解正确。还纠正了这样做/不这样做的原因应该是关于性能的(当然,网络总是比本地访问慢很多数量级)。
    猜你喜欢
    • 2011-02-08
    • 2011-06-20
    • 2012-12-08
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多