Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIWebView加载HtmlString在设备上不工作_Ios_Xcode_Google Analytics - Fatal编程技术网

Ios UIWebView加载HtmlString在设备上不工作

Ios UIWebView加载HtmlString在设备上不工作,ios,xcode,google-analytics,Ios,Xcode,Google Analytics,我有一个webview,我想使用loadHtmlString方法加载它。问题是,我希望能够使用我以前下载的图像更改img src。我还在html中使用google analitics,因此我需要将baseUrl设置为实际url,这样它才能工作。问题来了。如果我将baseUrl放入,图像将不会加载。如果我不设置baseUrl,它就会工作。我怎样才能避免这个问题,这样我就可以使用谷歌Analytics,并在我的应用程序中本地存储图像?我不希望在我的项目中实现google analitics sdk

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

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

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字符串中引用本地图像。没有简单的解决方案突然出现在我面前,但至少,您可能有几个(不是很好)选项:

    首先,您可以使用一些base64库对本地图像进行base64编码,例如:

    或在捆绑包中:

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName 
                                                          ofType:nil];
    
    但是,一旦您拥有完全限定的路径,您应该能够使用该路径:

    NSURL *imageUrl = [NSURL fileURLWithPath:imagePath];
    NSString *imageHtml = [NSString stringWithFormat:@"<img src='%@'>", imageUrl];
    
    NSURL*imageUrl=[NSURL fileURLWithPath:imagePath];
    NSString*imageHtml=[NSString stringWithFormat:@',imageUrl];
    
    我敢打赌这是一个外壳问题。考虑到设备区分大小写,而模拟器不区分大小写。检查URL并确保它包含正确的字符。

    您能将URL和用于加载字符串的代码粘贴到这里吗?我不能共享URL或html。但是,我必须说,如果我只是加载url或html字符串,但使用远程图像,它可以在任何浏览器上工作,也可以在webview中工作。但是,我需要将它们存储在本地。我还可以确认图像已正确存储,并且在将图像url替换为本地url时,它是正确的,并且文件存在于该位置location@AndreiFilip我的错。我已经用几个选项更新了我的答案,其中base64编码似乎最有希望。只有在设置baseUrl时才会出现问题。否则,html将不会出现任何问题。然而,据我所知,baseUrl是谷歌分析工作所必需的。。。我猜当我有一个baseUrl时,它会以某种方式将它附加到html代码中的任何url中。你知道加载webview后是否有办法查看html吗?明白。您可以通过类似于
    [webView stringByEvaluatingJavaScriptFromString:@“document.documentElement.outerHTML”]的方式获取html但我认为这对您没有帮助,因为在本例中,它只会显示您提供的html。我怀疑您不能同时引用本地文件和远程
    baseURL
    (也许是减少跨服务器脚本攻击的基本机制?)。这就是我建议使用base64编码的原因,因为它将您的图像嵌入到html中,并且不需要使用引用本地文件系统的html标记。
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName 
                                                          ofType:nil];
    
    NSURL *imageUrl = [NSURL fileURLWithPath:imagePath];
    NSString *imageHtml = [NSString stringWithFormat:@"<img src='%@'>", imageUrl];