WKWebView:从iOS中的文档文件夹加载内容

时间:2017-05-04 12:31:28

标签: ios swift wkwebview

在我的应用程序中,我有一个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这样的网络服务器,这是唯一的方法吗?如果我使用它,这个问题会得到解决吗?

2 个答案:

答案 0 :(得分:1)

您是否要求操作系统提供您下载的文件的位置?目标目录可以在不通知您的情况下进行更改,如果您使用硬编码的位置,则在目录结构更改后您将无法成功。你应该得到一个指向用户的可写缓存文件夹的URL,如下所示:

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

完成后,您可以将文件名(而不是整个路径)附加到该网址。我刚刚在我的一个程序中打印出该行的结果,并看到了我的应用程序正在使用的几个文件夹。

尝试一下,如果您仍然卡住,请告诉我。我可以写出示例代码......(只要我免费)。

答案 1 :(得分:-2)

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

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

WKWebViewAccessDocuments

相关问题