gpt4 book ai didi

iOS:WKWebview 如何允许位于 bundle 中的 html 文件读取文档目录

转载 作者:行者123 更新时间:2023-12-01 16:13:06 24 4
gpt4 key购买 nike

我在一个包中有一个 html 文件,我正在使用 WKWebView 从这个 html 加载内容:

let fileURL = URL(fileURLWithPath: Bundle.main.path(forResource:"demo", ofType: "html")!)
webView.loadFileURL(fileURL, allowingReadAccessTo: fileURL)

但是,此 html 文件有一些脚本试图访问位于 Documents 目录中的文件(一些视频保存在其中)但得到“无法加载本地资源”。错误。我在 AVPlayerViewController 的其他地方使用这个文件,所以我知道文件存在并且我使用的 url 是正确的。

我试过:

1. 将文档目录 url 传递给 allowingReadAccessTo 参数 - webview 甚至不加载

2. 将文档目录中的项目复制到 tmp 目录并在脚本中传递此 (tmp dir) url - 有效,但此过程发生太多且由于内存问题和大文件所需的时间,我不想复制这么多文件。

3. 将 html 文件及其脚本从 bundle 复制到文档目录 - 不相关 因为我使用的脚本会不时更改,所以要确保用户始终拥有(脚本的)最新版本,每次应用启动时我都必须复制它。

那么,有没有其他方法可以让 html 文件(位于 bundle 中)访问文档文件?

提前致谢

最佳答案

这涉及一个文件,但您应该能够使用下面的代码构建一个将相关文件复制到文档目录的功能。

///Copy the file from the bundle to the Documents Directory
guard let bundleURL = Bundle.main.url(forResource:"demo", ofType: "html") else {
preconditionFailure("Unable to get bundle URL")
}

guard let documentsDirectory = let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
preconditionFailure("Unable to get Documents URL")
}

let newURL = documentsDirectory.appendingPathComponent("demo.html")

do {
try FileManager.default.copyItem(at: bundleURL, to: newUrl)
} catch {
print("Error copying bundle: \(error)")
}


///Setup the WKWebView
let prefs = WKPreferences()
prefs.javaScriptEnabled = true

let webConfig = WKWebViewConfiguration()
webConfig.preferences = prefs

var webViewer = WKWebView(frame: view.frame, configuration: webConfig)
webViewer.loadFileURL(newURL, allowingReadAccessTo: documentsDirectory)

请记住,Bundle 在您的应用程序中位于完全不同的目录中。仅仅因为该文件可以访问文档目录并不意味着该文件中的 HTML 将能够找到引用脚本或您正在引用的其他 HTML 文件。您应该考虑 bundle 中的所有内容都是不可变的,并且位置本身只是一个来源。

关于iOS:WKWebview 如何允许位于 bundle 中的 html 文件读取文档目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com