Это возможно. Вы, вероятно, ищете WKScriptMessageHandler
. Создайте пользовательскую конфигурацию для веб-представления. Например, в вашем контроллере вида viewDidLoad
.
let configuration = WKWebViewConfiguration()
Зарегистрируйте обработчик сообщений сценария в конфигурации. Например, контроллер представления, который создает WKWebView
на viewDidLoad
. Затем контроллер представления должен соответствовать WKScriptMessageHandler
.
configuration.userContentController.add(self, name: "helloworld")
Программно создать веб-представление с пользовательской конфигурацией.
webView = WKWebView(frame: view.frame, configuration: configuration)
Вызвать обработчик сообщений WebKit из JavaScript. Обработчики сообщений доступны как свойства в глобальном объекте window.webkit.messageHandlers
. свойства используют имя, используемое при вызове WKUserContentController.add(_:name:)
и выше.
window.webkit.messageHandlers.helloworld.postMessage("Hi!");
Обработка вызова из контекста JavaScript.
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body as! String)
}
Отказ от ответственности : я скопировал и уменьшил фрагменты этого кода с моего собственного ответа до вопроса более высокого уровня, решение которого включает в себя эти шаги.