WKWebView внедрить JS / обнаружить нажатие кнопки на веб-сайте - JavaScript выполнение вернуло результат неподдерживаемого типа - PullRequest
0 голосов
/ 01 апреля 2020

С помощью iOS / Swift я хочу подключиться к существующему веб-сайту.

Поскольку я снова вхожу в разработку iOS, я обнаружил, что существует два метода введения JS / Java Скрипт на существующей веб-странице: WKUserContentController.addUserScript и WKWebView.evaluateJavaScript

Я не уверен, какой метод предпочтительнее - но мне удалось с WKWebView.evaluateJavaScript

Так что теперь я введите следующий код (так как я получил ошибку, я окружил ее try-catch, чтобы увидеть, что не так в JS)

let callBackFunction = "window.webkit.messageHandlers." + scriptMessageHandlerName + ".postMessage(message);"
var buttonScript = "var message = '" + buttonClickedMessage + "'; \n"
buttonScript += "try { $('#dialog').next().find('button:first').bind('click', function() { " + callBackFunction + " }); \n"
buttonScript += "} catch (err) { message = err; } ; \n"

Выводится следующая ошибка:

Optional(Error Domain=WKErrorDomain Code=5 "JavaScript execution returned a result of an unsupported type" UserInfo={NSLocalizedDescription=JavaScript execution returned a result of an unsupported type})

Удивительно, добавив следующую строку, ошибка больше не возникает

buttonScript += callBackFunction

Также я заметил, что, хотя я получаю сообщение об ошибке выше, метод приемника вызывается при нажатии указанной кнопки

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {

Итак, вопрос в том, что вызывает webView.evaluateJavaScript заполненный объект ошибки ??

webView.evaluateJavaScript(buttonScript,
                           completionHandler: { (result, error) -> Void in
                               if error != nil {
                                   print("Error occured - unable to add event to button")
                                   print(error)
                                   print(result)
                               } else {
                                   print("successfully added event to button")
                               }
})
...