WKWebView:Load iOS 中文档文件夹中的内容

WKWebView:Load contents from documents folder in iOS

在我的应用程序中,我有一个 index.html 作为资源包的一部分,它充当模板。它具有通往不同资源的路径。我将它加载到 WKWebview 中,当应用程序在线时,一切正常,所有资源都从 Web 加载,页面完美无缺。

在离线的情况下,我将这些资源下载到应用程序中的文档文件夹,并在 Index.html 中将在线路径替换为离线路径,例如

    <image src = "file:///Users/an/Library/Developer/..../Library/Caches/MYApp/Icon.png">
   <a href="file:///Users/an/Library/Developer/..../Library/Caches/MYApp/Data.html">

但是Index.html无法加载它。我尝试使用 wkWebView.load(URLRequest(url: URL(string: "file:///Users/an/Library/Developer/..../Library/Caches/MYApp/Data.html")!)) 将 Data.html 直接加载到 webview 中并且它有效,但是当我尝试通过 Index.html 加载它时它停止工作。

大多数人都说拥有像 GCDWebServer 这样的网络服务器,这是唯一的方法吗?如果我使用它,这个问题会得到解决吗?

您是在询问 OS 您下载的文件的位置吗?目标目录可以在不通知您的情况下更改,如果您使用硬编码位置,一旦目录结构更改,您将无法成功。您应该得到一个 url 指向用户的可写缓存文件夹,如下所示:

let userCachesDirectoryURL =  FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0]

一旦你有了它,你就可以将你的文件名(不是整个路径)附加到那个 url。我刚刚在我的一个程序中打印出该行的结果,并看到我的应用程序正在使用几个文件夹。

试一试,如果您仍然遇到困难,请告诉我。我可以编写示例代码...(只要我有空)。

我的要求是在 运行 时间使用 java 脚本从文档或缓存文件夹加载/更改 Index.html 中的资源。 (我根本没有对路径进行硬编码,当然我正在使用文件管理器)。这样做时,我无法使用 file:// 协议访问资源。今天我尝试了一个示例应用程序来演示我的问题,突然它开始工作了:)。现在我需要访问我的主要项目,看看出了什么问题。

在这个示例项目中,我试图通过传递来自缓存文件夹的路径在 运行 时间更改图像的 src。

WKWebViewAccessDocuments