我只使用swift 4.0(iOS 12.1)使用WKWebView构建我的应用程序
我需要从在线html运行我的javascript,但是如果我将url从索引移动到另一个页面,我的打印消息根本不起作用。
let contentController = WKUserContentController()
contentController.add(self, name: "myHandler")
let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "example.com/index") // of course https://
let request = URLRequest(url: url!)
webview.load(request)
当我移动到webView中的另一个html页面时,我错过了userContentController。索引页面可以调用此页面,但另一页面不会调用任何函数。
index.html(ok) - >链接到a.html - > a.html(不行) - >链接到index.html - > index.html(ok)
不要叫这个:
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("call print out")
if message.name == "myHandler" {
print("JS -> Native Call \(message.body)")
abc()
} else {
print("JS -> Native N/A")
}
}
我甚至无法得到任何消息“打印出来”。如何在我的代码中激活userContentController?
必须通过WKPreferences启用Javascript。您可以在WKWebViewConfiguration的preferences
字段中指定这些。默认情况下禁用Javascript。
您只需将首选项对象的javaScriptEnabled
字段设置为true
。可以通过首选项对象更改几个有用的设置。我想请你看一下文档。
具体来说,初始化WKWebView
的代码应如下所示。
let contentController = WKUserContentController()
contentController.add(self, name: "myHandler")
let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.preferences = WKPreferences()
configuration.preferences.javaScriptEnabled = true
webview = WKWebView(frame: self.view.frame, configuration: configuration)
webview.uiDelegate = self
webview.navigationDelegate = self
self.view = self.webview
PS您可能还想看看this question。我不是将你的标记重复,因为你的问题询问为什么javascript不起作用,而不是如何启用它。