javascript - 在 WKWebView(iOS,Swift)中使用本地 Javascript 源加载本地 HTML

标签 javascript html ios swift xcode

我正在尝试在 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”下是本地的。我也尝试将它们放在一个目录中,但没有成功。在项目内部的文件组织下面。

enter image description here

编辑: 当我将 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. If readAccessURL 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/

相关文章:

javascript - 如何用钛创建文件?

javascript - 在长文本中的每个单词上设置事件监听器

html - 无法将图像与 Twitter Bootstrap 对齐

html - 相当于在Outlook中 float

javascript - for 循环无法在 React 组件内的函数中工作

objective-c - presentModalViewController 检测动画完成

javascript - 选择其他项目时删除切换类

Javascript promise 链接

iphone - 当您尝试从不同的线程保存 managedObjectContext 时会发生什么?

android - 更改 ScrollView 指示器的颜色