UIWebView loadHtmlString无法在设备上运行

时间:2012-11-23 16:51:02

标签: ios xcode google-analytics

我有一个webview,我想使用loadHtmlString方法加载。问题是我希望能够使用我之前下载的图像更改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];

但是,为了让Google Analitics正常工作,我必须提供一个baseURL,我还有两个案例:

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

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

  2. 这个没有显示任何内容:(既不加载html字符串也不加网址)

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

2 个答案:

答案 0 :(得分:1)

我错误地认为问题是本地图像没有完全指定完整路径,但这似乎不是问题。但是,你是非常正确的(有点令人惊讶地)你不能指定一些基于网络的baseURL并且还引用HTML字符串中的本地图像。没有一个简单的解决方案能够向我发展,但至少看起来你可能有两个(不是很好的)选择:

首先,您可以使用某些base64库(如Mike Gallagher's NSData+Base64 category)对本地图像进行base64编码,例如:

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

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

第二次,您可以随时尝试将baseURL保留为nil,从HTML字符串中删除执行Google Analytics的JavaScript,然后尝试通过{ stringByEvaluatingJavaScriptFromString。这种方法可能会或可能不会起作用,具体取决于Google AnalyticsJavaScript的复杂程度(例如,它可能具有哪些基于网络的参考),但您可能会以这种方式做某事。

我对承担问题的道歉是一个微不足道的img网址。很明显,你已经确定了一个更基本的问题。


原始回答:

在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];

答案 1 :(得分:0)

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