【问题标题】:WKWebView not executing any js codeWKWebView 不执行任何 js 代码
【发布时间】:2018-08-16 16:08:12
【问题描述】:

我正在使用WKWebView 在我的 Xcode 项目中渲染一个本地 index.html 文件。问题是,文件中的 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

}

【问题讨论】:

  • 您可能想看看WKUserContentControllerWKUserScript。我使用这些在网页中注入 Javascript,但您需要将 js 代码与 html 分离并从包中加载。
  • 不是通过<script src="file.js"></script>

标签: ios swift wkwebview gcdwebserver


【解决方案1】:

这就是我设法创建一个 GCDWebServer 本地服务器的方法,该服务器使用 html 脚本标签成功呈现 js 文件,并且 no 需要 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!))
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2013-05-28
    • 2012-02-01
    相关资源
    最近更新 更多