iOS Предоставление пользовательского API для WKWebView - PullRequest
1 голос
/ 16 января 2020

В Android, я использую метод addJavascriptInterface для предоставления пользовательского API веб-страниц, которые я загружаю в WebView.

Is есть похожая альтернатива для iOS WKWebView?

, с которой я столкнулся evaluateJavaScript, которая позволяет мне запустить JavaScript, чтобы добавить свой API в глобальная область, но я не могу найти способ добавления кода, который связывается с моим приложением.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Это возможно. Вы, вероятно, ищете 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)
}

Отказ от ответственности : я скопировал и уменьшил фрагменты этого кода с моего собственного ответа до вопроса более высокого уровня, решение которого включает в себя эти шаги.

1 голос
/ 16 января 2020

Можно общаться из WKWebview с кодом, но только с одной функцией, и это довольно сложно сделать, но если вы все хорошо справляетесь, вы можете получить хорошие результаты. Я позволю этой статье объяснить это, потому что это довольно сложный процесс, и они сделают это лучше, чем я.

Создание связей между WKWebView и собственным кодом

...