在WKWebView(iOS、Swift)中加载带有本地Javascript源的本地HTML

在WKWebView(iOS、Swift)中加载带有本地Javascript源的本地HTML,javascript,html,ios,swift,xcode,Javascript,Html,Ios,Swift,Xcode,我正在尝试在iOS应用程序(Swift 4.2)的WKWebView中加载本地html文件。不幸的是,此本地文件包含似乎未执行的javascript代码 以下是此html文件(取自): 文件是项目属性中“生成阶段/复制捆绑资源”下的本地文件。我也试着把它们放在一个目录里,但没有成功。在项目内部的文件组织下方 编辑:当我将html文件中的url从Beethoven.mei更改为https://www.verovio.org/gh-tutorial/mei/Beethoven_StringQuar

我正在尝试在iOS应用程序(Swift 4.2)的WKWebView中加载本地html文件。不幸的是,此本地文件包含似乎未执行的javascript代码

以下是此html文件(取自):

文件是项目属性中“生成阶段/复制捆绑资源”下的本地文件。我也试着把它们放在一个目录里,但没有成功。在项目内部的文件组织下方

编辑:当我将html文件中的url从
Beethoven.mei
更改为
https://www.verovio.org/gh-tutorial/mei/Beethoven_StringQuartet_op.18_no.2.mei
(同一个文件,但在Verovio的网站上),任何东西都很好

因此:

  • Local.js资源工作正常

  • 问题来自jquery无法加载本地文本文件

您知道如何使jquery能够加载本地文件吗

谢谢大家!


M.

首先检查您的
index.html
文件是否有js的scr路径。如果像下面这样,这意味着js文件包含在js文件夹中。所以,您需要在添加到项目时添加对该文件夹的引用

<script src="js/jquery.js"></script>
之后,将该文件加载到webView

do {
    let contents =  try String(contentsOfFile: path, encoding: .utf8)
    let baseUrl = URL(fileURLWithPath: path)
    webView.loadHTMLString(contents as String, baseURL: baseUrl)
} catch {
    print ("File HTML error")
}
根据,
loadFileURL
执行以下操作:

如果
readAccessURL
引用单个文件,则WebKit只能加载该文件。如果
readAccessURL
引用了一个目录,则WebKit可能会加载该文件中的文件

您得到的
url
是一个文件的url,即HTML文件。您需要目录的url。您可以通过调用deletingLastPathComponent来执行此操作:

webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())

您可以使用
loadHTMLString
方法加载HTML,如下所示:

let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "html")!
do {
    let html = try String(contentsOf: url)
    webView.loadHTMLString(html, baseURL: url.deletingLastPathComponent())
} catch ....

baseURL指向文件系统中的应用程序目录。您可以在
script
标记相对位置的
src
属性中写入,该位置被解释为相对于baseURL。

谢谢您的回答,但问题似乎来自jquery,请参阅我的编辑。再次感谢@Maxime现在您可以尝试使用let path=Bundle.main.resourcePath!+“/html/index.html”我测试只是为了确保没有遗漏任何内容,但正如我在编辑中解释的那样,它并不能解决问题。再次感谢您的回答,但问题似乎来自jquery,请参阅我的编辑。我尝试了你的想法,但不幸没有成功:)
do {
    let contents =  try String(contentsOfFile: path, encoding: .utf8)
    let baseUrl = URL(fileURLWithPath: path)
    webView.loadHTMLString(contents as String, baseURL: baseUrl)
} catch {
    print ("File HTML error")
}
webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "html")!
do {
    let html = try String(contentsOf: url)
    webView.loadHTMLString(html, baseURL: url.deletingLastPathComponent())
} catch ....