Как перехватить пост-сообщение, отправленное родительскому элементу, с помощью wkscriptmessagehandler?

Я загружаю URL-адрес в WKWebView, который отправляет почтовое сообщение родительскому элементу:

window.parent.test.postMessage('A message')

Я реализую WKScriptMessageHandler и пытаюсь получить это сообщение с помощью userController (didReceiveMessage), но он никогда не вызывается:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if(message.name == "test") {
        print("JavaScript is sending a message \(message.body)")
    }
}

Я думаю, это потому, что сообщение отправляется родительскому элементу, и я загружаю веб-представление напрямую, не загружая родительский элемент (у меня нет доступа к родительскому элементу). Есть ли способ захватить сообщение от родителя без загрузки этого родителя в мой WKWebView?

0
0
1 215
1

Ответы 1

Использовать в javascript:

webkit.messageHandlers.yourCustomName.postMessage(...)

Внутри стрижа:

webKitViewController = segue.destination as? CustomViewControllerWithWebView

if let userContentController = webKitViewController?.webView?.configuration.userContentController {
    userContentController.add(self, name: "yourCustomName")

Сделайте продолжение себя:

extension MyController: WKScriptMessageHandler
{
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print("received message:\n\(message.body)")
    }
}

Если вы не можете отредактировать javascript, дождитесь события didload в веб-просмотре и загрузите строку с javascipt, который переопределит тестовую функцию postMessage. Таким образом, он будет перенаправлен на ваш обработчик webkit.

webView.evaluateJavascript("window.parent.test.postMessage = function(message) {
  webkit.messageHandlers.yourCustomName.postMessage(message)}")

У меня нет доступа для редактирования веб-страницы. Только URL: /

chr0x 13.09.2018 21:40

Я обновил свой ответ. Посмотрите, как переопределить функцию postMessage.

Prcela 13.09.2018 21:50

Другие вопросы по теме