5

我正在下载图像文件并写入文件目录,如下所示:

NSArray   *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString  *documentsDirectory = [paths objectAtIndex:0];

NSString  *objURL = @"http://test.test.com/file/image.png";
NSURL     *objurl = [NSURL URLWithString:objURL];
NSData    *imgData = [NSData dataWithContentsOfURL:objurl];

NSString *imgFile = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"image.png"];
[imgData writeToFile:imgFile atomically:YES];

在我的 webView 中,我从捆绑资源中加载了一个 html 文件以在我的 webView 中使用,但是如何在 html 中使用标签来读取文档目录中的 image.png?

<html>
<body>
    <img src="../what/is/the/path/to/use/image.png" />
</body>
</html>
4

4 回答 4

2

您可以使用带有file://方案的绝对路径来提供此图像的 URL:

NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)[0];
NSString *filePath = [NSString stringWithFormat:@"file://%@/image.png", documentsDirectory];

然后,您可以运行一些 javascript 来更新src标签以将其更新到新路径:

NSString *javascript = [NSString stringWithFormat:@"var imageElement = document.getElementById('localFile'); imageElement.setAttribute('src', '%@');", filePath];
[self.webView stringByEvaluatingJavaScriptFromString:javascript];

在您的 HTML 中,路径类似于:

<html>
    <body>
        <img id="localFile" src="file:///var/mobile/Applications/3D7D43E8-FA5E-4B19-B74C-669F7D1F3093/Documents/image.png" />
    </body>
</html>
于 2013-07-05T18:32:22.120 回答
2

我没有评估 JavaScript,而是在我的 html 内容中写下一个占位符,然后直接用所需的内容替换它:

NSString *htmlFilePath = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlFilePath encoding:NSUTF8StringEncoding error:&error];
if (error) {
  // handle error
  return;
}

NSString *imageFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"sample_image.png"];
NSURL *imageFileURL = [NSURL fileURLWithPath:imageFilePath];
NSString *sampleImageReplacement =
  [NSString stringWithFormat:@"<img src=\"%@\" />", [imageFileURL absoluteString]];

// Replace the placeholder w/ real content,
//   and of course, we can also replace it w/ empty string
//   if the image cannot be found.
htmlString = [htmlString stringByReplacingOccurrencesOfString:@"%sample_image%"
                                                   withString:sampleImageReplacement];
...
[webView loadHTMLString:htmlString baseURL:nil];
于 2016-01-21T04:10:01.803 回答
1

您可以从应用程序包中加载图像,但不能直接从文档目录中加载图像。

但是有一个解决方法。

使用CocoaHTTPServer创建一个 InAppHttpServer,您可以在 web 视图中使用 http URL 访问文档目录中的图像。

要不然

将图像转换为base64并使用evaluatejavascriptwebview加载图像

document.getElementById('img').setAttribute( 'src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' );
于 2016-08-19T06:46:51.453 回答
0

您不能从一开始就绑定图像源。您必须通过 JavaScript 来完成。

您需要通过评估JS将图像的路径传递给UIWebView。在这里您可以传递图像的路径,JS 会将图像加载到相应的 HTML 标记中。

于 2013-07-05T18:31:54.507 回答