WKWebView 不执行任何 js 代码

WKWebView not executing any js code

我正在 Xcode 项目中渲染一个本地 index.html 文件,使用 WKWebView。问题是,文件中的 html 和 css 代码已成功显示在 webView 中,但是 javaScript 根本没有呈现。

我在 Whosebug 上搜索了关于这个问题的类似问题,我想到的是 Apple 不会在本地 html 文件中执行 js,为了执行 js,我需要使用使用 GCDWebServer.

的本地网络服务器

老实说,我对 hole webServer 概念不熟悉,我发现很难弄清楚如何 运行 本地 webServer 中的 html 以及如何使用 GCDWebServer.

在 WKWebView 内的本地服务器上 运行 我的 index.html 文件的简单方法是什么以及如何做到这一点

这是我的代码:

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

}

这就是我如何成功创建一个 GCDWebServer 本地服务器,其中 js 文件使用 html 脚本标签成功渲染并且 不需要 JS 注入例如 WkUserscriptevaluateJavaScript

我的代码:

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

}