Quiero pasar la variable de JavaScript a Swift. Recibo un error en JavaScript y lo busco, pero no obtuve ningún resultado. el error es:
TypeError: no se puede leer la propiedad 'messageHandlers' de undefined
¿Alguien puede ayudar?
Mi código en 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)") } }Y en JavaScript:
click: event => { window.webkit.messageHandlers.test.postMessage("hi"); }Después de agregar el controlador de mensajes de "prueba", debe agregarlo a la configuración de su webView , pero no lo está haciendo.
Al incluir este controlador de mensajes en su objeto WKUserContentController , su vista web definirá una nueva función window.webkit.messageHandlers.name.postMessage(messageBody) que se puede llamar en todos los marcos.
Intente cambiar su viewDidLoad() a lo siguiente:
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) }