我正在尝试在 WKWebView 中为 iOS 应用程序(Swift 4.2)加载本地 html 文件。不幸的是,这个本地文件包含似乎没有被执行的 javascript 代码。
下面是这个 html 文件(取自 https://www.verovio.org/tutorial.xhtml?id=topic00):
<html>
<head>
<title>Verovio Hello World! example</title>
<script src="verovio-toolkit.js" type="text/javascript" ></script>
<script src="jquery-3.1.1.min.js" type="text/javascript" ></script>
</head>
<body>
Hello World!
<div id="svg_output"/>
<script type="text/javascript">
var vrvToolkit = new verovio.toolkit();
$.ajax({
url: "Beethoven_StringQuartet_op.18_no.2.mei"
, dataType: "text"
, success: function(data) {
var svg = vrvToolkit.renderData(data);
$("#svg_output").html(svg);
}
});
</script>
</body>
</html>
在用 swift 编写的 View Controller 文件下面:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "html")!
webView.loadFileURL(url, allowingReadAccessTo: url)
}
}
文件在项目属性的“Build Phases/Copy Bundle Resources”下是本地的。我也尝试将它们放在一个目录中,但没有成功。在项目内部的文件组织下面。
编辑: 当我将 html 文件中的 url 从 Beethoven.mei
更改为 https://www.verovio.org/gh-tutorial/mei/Beethoven_StringQuartet_op.18_no.2.mei
(相同的文件,但在 Verovio 的网站上),一切正常!!
所以:
本地 .js 资源工作正常
问题来自 jquery 无法加载本地文本文件
关于如何使 jquery 能够加载本地文件的任何想法?
谢谢!
M.
最佳答案
根据docs , loadFileURL
这样做:
If
readAccessURL
references a single file, only that file may be loaded by WebKit. IfreadAccessURL
references a directory, files inside that file may be loaded by WebKit.
你得到的url
是一个文件的url,即HTML文件。您需要目录的 url。您可以通过调用 deletingLastPathComponent
来完成此操作:
webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
关于javascript - 在 WKWebView(iOS,Swift)中使用本地 Javascript 源加载本地 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133012/