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