我有一个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字符串也不加网址)
[appsWebView loadHTMLString:htmlString baseURL:[NSURL urlWithString:@“http://test.com”]];
答案 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并确保其中包含正确的字符。