1

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

我在 stackoverflow 上搜索了关于这个问题的类似问题,我想出的是 Apple 不在本地 html 文件中执行 js,为了执行 js,我需要使用本地网络服务器使用GCDWebServer.

老实说,我是洞 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

}
4

1 回答 1

0

这就是我设法创建一个本地服务器的方法,其中 js 文件使用脚本标签GCDWebServer成功呈现,并且不需要JS 注入,例如htmlWkUserscriptevaluateJavaScript

我的代码:

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

}
于 2018-03-19T10:15:31.057 回答