WKWebView не выполняет JS-код

Я рендеринг локального файла index.html внутри моего проекта XCode, используя WKWebView, Дело в том, что HTML-код и CSS-код внутри файла успешно отображаются внутри веб-представления, но javaScript однако, не отображается вообще.

Я искал похожие вопросы по этому вопросу на stackru, и я пришел к выводу, что Apple не выполняет js в локальном html-файле, и для выполнения js мне необходимо использовать локальный веб-сервер, используя GCDWebServer,

Если честно, я новичок в концепции дырочного веб-сервера, и мне трудно понять, как запустить HTML в локальном веб-сервере и как это сделать с GCDWebServer,

Какой простой способ запустить мой файл index.html на локальном сервере внутри WKWebView и как это сделать

вот мой код:

override func viewDidLoad() {
    super.viewDidLoad()

    let resourceUrl = Bundle.main.url(forResource: "index", withExtension: "html")
    let urlRequest = URLRequest.init(url: resourceUrl!)
    webView.load(urlRequest)

    webView.allowsBackForwardNavigationGestures = true

}

1 ответ

Решение

Вот так мне удалось создать GCDWebServer локальный сервер с js файлами рендеринга успешно с html теги сценария и без необходимости инъекций JS, таких как WkUserscript или же evaluateJavaScript

мой код:

import UIKit
import WebKit
import GCDWebServer

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{


var wkWebView: WKWebView!
var webServer = GCDWebServer()

var contentController = WKUserContentController()


func initWebServer() {
    let folderPath = Bundle.main.path(forResource: "www", ofType: nil)

    webServer.addGETHandler(forBasePath: "/", directoryPath: folderPath!, indexFilename: "index.html", cacheAge: 0, allowRangeRequests: true)

    webServer.start(withPort: 8080, bonjourName: "GCD Web Server")

}

public override func viewDidLoad() {
    super.viewDidLoad()

    initWebServer()

    let config = WKWebViewConfiguration()
    config.userContentController = contentController


    wkWebView = WKWebView(frame: view.bounds, configuration: config)
    wkWebView.scrollView.bounces = false
    wkWebView.uiDelegate = self
    wkWebView.navigationDelegate = self
    view.addSubview(wkWebView!)

    wkWebView.load(URLRequest(url: webServer.serverURL!))
}

}
Другие вопросы по тегам