无法读取未定义的属性“messageHandlers" [英] Cannot read property 'messageHandlers' of undefined
问题描述
我想将 JavaScript 变量传递给 Swift.我在 JavaScript & 中遇到错误搜索,但我没有得到任何结果.错误是:
I want to pass JavaScript variable to Swift. I get an error in JavaScript & search for that but I didn't get any result. The error is:
TypeError: 无法读取未定义的属性messageHandlers"
TypeError: Cannot read property 'messageHandlers' of undefined
有人可以帮忙吗?
我在 Xcode 中的代码:
My code in Xcode:
import UIKit
import WebKit
class ViewController: UIViewController,WKScriptMessageHandler,WKNavigationDelegate {
var webView = WKWebView()
override func viewDidLoad() {
super.viewDidLoad()
webView.frame = view.bounds
webView.navigationDelegate = self
let url = URL(string: "MyUrl")!
let urlRequest = URLRequest(url: url)
webView.load(urlRequest)
webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
view.addSubview(webView)
let userContentController = WKUserContentController()
userContentController.add(self, name: "test")
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("Name: \(message.name)")
print("Body: \(message.body as! String)")
}
}
在 JavaScript 中:
And in JavaScript:
click: event => {
window.webkit.messageHandlers.test.postMessage("hi");
}
推荐答案
添加测试"消息处理程序后,您需要将其添加到您的webView
的配置中,但是您并没有这样做所以.
After adding the "test" message handler, you need to add it to your webView
's configuration, but you are not doing so.
通过将此消息处理程序包含到您的 WKUserContentController
对象中,您的 webView 将定义一个可以调用的新函数 window.webkit.messageHandlers.name.postMessage(messageBody)
在所有帧中.
By including this message handler into your WKUserContentController
object, your webView will define a new function window.webkit.messageHandlers.name.postMessage(messageBody)
that can be called in all frames.
尝试将您的 viewDidLoad()
更改为以下内容:
Try changing your viewDidLoad()
to the following:
override func viewDidLoad() {
super.viewDidLoad()
let config = WKWebViewConfiguration()
let userContentController = WKUserContentController()
userContentController.add(self, name: "test")
config.userContentController = userContentController
webView = WKWebView(frame: view.bounds, configuration: config) // Create webView with the configuration
webView.navigationDelegate = self
let url = URL(string: "MyUrl")!
let urlRequest = URLRequest(url: url)
webView.load(urlRequest)
webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
view.addSubview(webView)
}
这篇关于无法读取未定义的属性“messageHandlers"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!