将 iOS 中被调用函数的结果返回给 JavaScript 中 WkWebView 中的调用函数
Posted
技术标签:
【中文标题】将 iOS 中被调用函数的结果返回给 JavaScript 中 WkWebView 中的调用函数【英文标题】:Return result from called function in iOS to calling function in WkWebView in JavaScript 【发布时间】:2017-07-19 14:27:15 【问题描述】:我们在 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??
谁能告诉我怎么做?
我知道我可以使用 evaluateJavascript 来回调另一个方法,但由于某些限制,我必须从同一方法返回结果。
【问题讨论】:
我认为这本质上是 my question a few years ago 的副本。很遗憾,还没有任何答案。 【参考方案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
斯威夫特:
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
if(message.name == "callbackHandler")
print("JavaScript is sending a message \(message.body)")
webView.evaluateJavaScript("callNativeCodeReturn(0)")
当然这不是很优雅,也不是同步的……
还有另一种使用 Promise 的方法,您可以在此处了解更多信息: http://igomobile.de/2017/03/06/wkwebview-return-a-value-from-native-code-to-javascript/
【讨论】:
有没有办法将 promise uuid 生成器集成到Promise
类本身中?如果以透明的方式完成,而不必使用不同的类,而是使用相同的 new Promise(...)
构造函数,那就更好了。
强烈建议不要修改标准 JavaScript 对象的原型。但这是可能的 (w3schools.com/js/js_object_prototypes.asp)【参考方案2】:
iOS 14+ 添加了一个“didReceive:replyHandler”参数,该参数可以包含一个“reply”对象或一个“errorMessage”。这个“replyHandler”实际上是上述“evaluateJavaScript”异步回调的正式实现:
WKScriptMessageHandlerWithReply interface 和 didReceive:replyHandler 的 Apple 文档
有关使用此“replyHandler”的示例,请参阅此 *** 帖子:iOS 14 API WKScriptMessageHandlerWithReply
【讨论】:
【参考方案3】:您可以试试WebViewJavascriptBridge
库,看看它是否符合您的需求。
https://github.com/marcuswestin/WebViewJavascriptBridge.
【讨论】:
以上是关于将 iOS 中被调用函数的结果返回给 JavaScript 中 WkWebView 中的调用函数的主要内容,如果未能解决你的问题,请参考以下文章