Загрузка локального HTML с локальными источниками Javascript в WKWebView (iOS, Swift) - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь загрузить локальный HTML-файл в WKWebView для приложения для iOS (Swift 4.2). К сожалению, этот локальный файл содержит код 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:

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)
    }
}

Файлы являются локальными в разделе «Фазы сборки / Копирование ресурсов пакета» в свойствах проекта. Я также пытался поместить их в каталог, но безуспешно. Ниже файловая организация внутри проекта.

enter image description here

РЕДАКТИРОВАТЬ: Когда я изменяю URL в файле html с Beethoven.mei на https://www.verovio.org/gh-tutorial/mei/Beethoven_StringQuartet_op.18_no.2.mei (тот же файл, но на веб-сайте Verovio), все работает хорошо !!

Итак:

  • Локальные ресурсы .js работают нормально

  • Проблема связана с тем, что jquery не может загрузить локальный текстовый файл

Есть идеи, как сделать jquery способным загружать локальный файл?

Спасибо!

* +1039 * М.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Согласно документам , loadFileURL делает это:

Если readAccessURL ссылается на один файл, WebKit может загрузить только этот файл. Если readAccessURL ссылается на каталог, WebKit может загрузить файлы внутри этого файла.

Полученный url - это URL-адрес файла, а именно файла HTML. Вам нужен URL-адрес каталога. Вы можете сделать это, позвонив deletingLastPathComponent:

webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
0 голосов
/ 03 ноября 2018

Сначала проверьте, что у вашего index.html файла есть путь scr для js. если, как показано ниже, это означает, что файлы js содержатся в папке js. поэтому вам нужно добавить ссылку на эту папку при добавлении в проект.

<script src="js/jquery.js"></script>

затем получите путь к основному ресурсу, как показано ниже

let path = Bundle.main.resourcePath! + "/\(folderName)/\(fileName)"
print("path:=",path )

после этого загрузить этот файл в 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...