【问题标题】:wkwebview - display image from documents directory into local htmlwkwebview - 将文档目录中的图像显示到本地 html
【发布时间】:2017-12-15 03:57:36
【问题描述】:

我有一个应用程序,其中包含要以本地 html 显示的下载图像。我仍在使用Objective-C,因为这个应用程序已经 4 岁了。 首次启动应用程序时,它将下载图像和其他动态内容(我检查过,它位于 Documents/content/ 目录中)。

我有这个代码来获取内容位置:

NSString *contentBasePath = [app.contentManager contentBasePath];

我得到的:

/var/mobile/Containers/Data/Application/4AFD30E2-F4F7-405A-9FE9-1857EEC11CC7/Documents/content

然后我有几个html页面会动态调用下载的图片:

<div class="box-round benefits-thumbnail" style="background-image:url('file://{{../contentBasePath}}/{{filename}}');"></div>

我检查了,{{../contentBasePath}} 会得到:

/var/mobile/Containers/Data/Application/4AFD30E2-F4F7-405A-9FE9-1857EEC11CC7/Documents/content

{{filename}} 会得到

example.jpg

这都是正确的。

所有这些都适用于uiwebview。但是我需要使用wkwebview,图像没有显示出来。

我试过了:

<div class="box-round benefits-thumbnail" style="background-image:url('{{../contentBasePath}}/{{filename}}');"></div>

它仍然无法正常工作。

我用谷歌搜索并四处阅读,似乎wkwebview 不允许绝对路径。所以我按照这个建议尝试了:

[_webConfig.preferences  setValue:@YES forKey:@"allowFileAccessFromFileURLs"];

还是不行。

我该如何解决这个问题?

【问题讨论】:

  • 你有没有找到解决办法??我在 swift 中也有类似的问题,图像来自模拟器但不在真实设备中。

标签: html ios11 wkwebview


【解决方案1】:

似乎这是 WebKit 的限制。作为一种解决方法,您可以将 HTML 内容写入文档目录中的文件并使用 [webView loadFileURL:fileUrl allowingReadAccessToURL:dirUrl] 加载它

文档链接:https://developer.apple.com/documentation/webkit/wkwebview/1414973-loadfileurl

【讨论】:

  • 我最终将整个文件夹复制到临时文件夹中,这样就可以了。
  • 请注意,资源位于您的捆绑目录中,一切正常。只有documents目录有这个问题。
  • @sooon 你做得怎么样,你能帮我完成这些步骤吗
【解决方案2】:

文件必须在文档目录中。

我实现了以下内容来检索文档:

    let documentDirUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
    let fileNameWithExtension = "IMG_0002.PNG"
    let indexFileUrl = documentDirUrl.appendingPathComponent(fileNameWithExtension)
    if FileManager.default.fileExists(atPath: indexFileUrl.path) {
        webView.loadFileURL(indexFileUrl, allowingReadAccessTo: documentDirUrl)
    }

【讨论】:

  • 我有基本 url,其中图像存储在文档目录中 n 我有带有图像扩展名的 HTML 如何在 WKWebview 中加载它你能帮我stackoverflow.com/questions/63800637/…
  • @iMinion 我的解决方案在目标 c 中,但我想方法应该是相同的。就我而言,我从网上下载所有内容,因此每次加载页面时,我都必须将所有下载的内容(包括图像)移动到临时文件夹中。但也许 swift 会有比这更优雅的解决方案。希望这对您有所帮助。祝你好运。
  • @sooon 你是否一次只显示一张图片,或者如果你能说出你是如何做到的。
  • 它基本上是一个html产品页面,所以有多个图像,如果我没记错的话,当我们下载文件时,它们都会转到 Documents/content/ 文件夹。然后我只是使用for循环将该文件夹中的文件一一复制到临时文件夹中,然后我的html从临时文件夹中加载图像。
  • 还有一点要注意,它是临时文件夹,这意味着每当设备运行不足或需要更多内存时,它都会删除您的内容。所以我有一个名为每次用户启动应用程序的下载功能。这不是我所知道的最有效的处理方式,但它可以完成工作。
猜你喜欢
  • 2020-12-27
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多