3

我们从 javascript 调用 iOS 中的一个函数,即

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??
        }
    }

有人可以告诉我该怎么做吗?

我知道我可以使用evaluateJavascript来回调另一种方法,但由于某些限制,我必须从同一方法返回结果。

4

3 回答 3

2

这是一种方法:

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
}

迅速:

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/

于 2018-01-23T16:06:48.920 回答
1

iOS 14+ 添加了一个“didReceive:replyHandler”参数,该参数可以包含一个“reply”对象或一个“errorMessage”。这个“replyHandler”实际上是上述“evaluateJavaScript”异步回调的正式实现:

WKScriptMessageHandlerWithReply 接口didReceive:replyHandler的 Apple 文档

有关使用此“replyHandler”的示例,请参阅此 StackOverflow 帖子:iOS 14 API WKScriptMessageHandlerWithReply

于 2021-06-05T11:56:37.687 回答
-1

你可以WebViewJavascriptBridge试试这个库,看看它是否符合你的需要。

https://github.com/marcuswestin/WebViewJavascriptBridge

于 2018-01-11T02:26:26.490 回答