我有一个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,另外还有两种情况:
这给出了上面提到的错误:(它在模拟器中可以正常工作,但在设备上运行时却给出错误)
[appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@“ test.com”]]];
这个根本不显示任何内容:(均不加载html字符串或url)
[appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@“ http://test.com”]]];
最佳答案
我错误地认为问题是本地映像没有完全指定完整路径,但是这似乎不是这里的问题。但是,您说对了,您似乎无法指定某些基于Web的baseURL
,并且无法在HTML字符串中引用本地图像,这是很正确的。没有简单的解决方案可以解决我的问题,但是至少,看来您可能有几个(不是很好)的选择:
首先,您可以使用诸如Mike Gallagher's NSData+Base64 category之类的一些base64库对baseimage进行编码,例如:
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
注入该JavaScript。取决于Google Analytics(分析)JavaScript的复杂性(例如,它可能还包含哪些基于Web的引用),这种方法可能会或可能不会起作用,但是您可能会以这种方式做一些外部尝试。我为这个问题感到抱歉是一个琐碎的
img
URL。显然,您已经确定了一个更根本的问题。原始答案:
在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];
关于ios - UIWebView loadHtmlString在设备上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13533088/