0

我有一个我想使用 loadHtmlString 方法加载的 webview。问题是我希望能够使用我之前下载的图像更改 img src。我还在 html 中使用了 google analitics,所以我需要将 baseUrl 设置为实际的 url,这样它才能工作。问题来了。如果我放入 baseUrl,图像将不会加载。如果我不设置 baseUrl,它可以工作。我该如何解决这个问题,这样我就可以使用 google analitycs 并将图像本地存储在我的应用程序中?我宁愿不必在我的项目中实现 google analitics sdk。

奇怪的是,如果我在模拟器中运行它,而不是在我的 baseUrl 前面加上“http://”前缀,它就可以正常工作。但是,当我在设备上运行它时,我收到以下错误并且它不起作用:

Domain=WebKitErrorDomain Code=101 "The URL can’t be shown"

谢谢

编辑

如果我这样做,它会起作用:

[appsWebView loadHTMLString:htmlString baseURL:nil];

但是,我必须提供一个 baseURL 才能让 Google Analitics 正常工作,我还有两种情况:

  1. 这给出了上述错误:(它在模拟器中工作正常,但在设备上运行时出错)

    [appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@"test.com"]];

  2. 这个根本不显示任何东西:(既不加载html字符串也不加载url)

    [appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@"http://test.com"]];

4

2 回答 2

1

我错误地认为问题在于本地图像没有完全指定完整路径,但这似乎不是问题所在。但是,您似乎(有点令人惊讶)您不能指定一些基于 Web 的baseURL并且还引用 HTML 字符串中的本地图像,这是完全正确的。没有简单的解决方案突然出现在我面前,但至少,您似乎有几个(不是很好)选择:

首先,您可以使用诸如Mike Gallagher 的 NSData+Base64 类别之类的base64 库对本地图像进行 base64 编码,例如:

NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
NSString *imageDataBase64 = [imageData base64EncodedString];
NSString *imageHtml = [NSString stringWithFormat:@"<img src='data:image/png;base64,%@'>", imageDataBase64];

这会减慢初始渲染速度,但也许总比没有好。

其次,您始终可以尝试保留baseURLas nil,从 HTML 字符串中删除执行 Google Analytics 的 JavaScript,然后尝试通过stringByEvaluatingJavaScriptFromString. 这种方法可能有效也可能无效,具体取决于 Google Analytics JavaScript 的复杂性(例如,它可能有哪些进一步的基于 Web 的引用),但您也有可能以这种方式做某事。

我很抱歉假设问题是一个微不足道的imgURL。显然,您已经确定了一个更根本的问题。


原答案:

在 HTML 字符串中创建图像 URL,使其成为本地文件系统中的完全限定文件 URL:

图像位于Documents

NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *imagePath = [documentsPath stringByAppendingPathComponent:imageName];

或在捆绑包中:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName 
                                                      ofType:nil];

但是,一旦你有完全合格的路径,你应该能够使用它:

NSURL *imageUrl = [NSURL fileURLWithPath:imagePath];
NSString *imageHtml = [NSString stringWithFormat:@"<img src='%@'>", imageUrl];
于 2012-11-23T17:00:56.537 回答
0

我敢打赌这是一个外壳问题。考虑到设备是区分大小写的,而模拟器不是。检查 URL 并确保它包含正确的字符。

于 2012-11-26T17:47:39.577 回答