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 注入例如 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!))
}
}
我正在 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 注入例如 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!))
}
}