Возврат результата от вызываемой функции в iOS к вызывающей функции в WkWebView в JavaScript

1

Мы вызвали функцию в iOS из javascript, т.е.

var data = webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");

Я хочу назначить возвращаемое значение в переменной данных из вызываемого метода в iOS.

Код iOS:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if(message.name == "callbackHandler") {
            print("JavaScript is sending a message \(message.body)")
            how to send data back??
        }
    }

может кто-нибудь, пожалуйста, скажите мне, как это сделать?

Я знаю, что я могу использовать javascript для вызова другого метода, но из-за какого-то ограничения мне нужно вернуть результат из того же метода.

Теги:
iphone
wkwebview

2 ответа

1

Вот один из подходов:

Javascript:

function callNativeCode() {
    webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");
}

// this function will be later called by native code
function callNativeCodeReturn(returnedValue) {
    // do your stuff with returned value here
}

Swift:

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

Конечно, это не очень элегантно, а не синхронно...

Существует другой подход с обещаниями, вы можете узнать об этом подробнее: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/

  • 0
    Есть ли способ интегрировать генератор обещаний uuid в сам класс Promise ? Еще лучше, если сделать это прозрачным способом, не используя другой класс, а используя тот же new Promise(...) .
  • 1
    Настоятельно не рекомендуется модифицировать прототипы стандартных объектов JavaScript. Но это возможно ( w3schools.com/js/js_object_prototypes.asp )
-2

Вы можете дать библиотеке WebViewJavascriptBridge попробовать и посмотреть, соответствует ли она вашим потребностям.

https://github.com/marcuswestin/WebViewJavascriptBridge.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню