我们从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条答案
按热度按时间cu6pst1q1#
下面是一种方法:
JavaScript:
斯威夫特:
当然这不是很优雅和不同步...
还有另一种使用promise的方法,你可以在这里找到更多关于它的信息:http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/
yeotifhr2#
iOS 14+添加了“didReceive:replyHandler”参数,该参数可以包含“reply”对象或“errorMessage”。这个'replyHandler'实际上是上述'evaluateJavaScript'异步回调的正式实现:
WKScriptMessageHandlerWithReply interface和didReceive:replyHandler的Apple文档
有关使用此'replyHandler'的示例,请参阅此StackOverflow帖子:iOS 14 API WKScriptMessageHandlerWithReply
ubof19bj3#
如果你需要从Swift中异步获取JS中的数据,你也可以使用
localStorage
。在Swift中:
在JS中:
irlmq6kh4#
您可以给予
WebViewJavascriptBridge
库,看看它是否符合您的需要。https://github.com/marcuswestin/WebViewJavascriptBridge。