1、让Webview响应App的行为,可以通过调用函数:evaluateJavaScript:completionHandler:
参数javaScriptString是一个字符串,需要与前端协商好对应html中js定义的对象及函数,譬如
NSString *script = [NSString stringWithFormat:@“obj.jsmethod(‘%@‘)”, parmeter];
obj——html中script中定义的对象。
jsmethod——html中script中定义的函数。
parmeter——我们要传递给WKWebview中的参数,通常用NSJSONSerialization转化为字符串来传递。
通过执行函数evaluateJavaScript:completionHandler:,我们可以传递app端中的数据给webview,并触发html脚本函数的调用,从而响应app的行为。
2、webview如何调用app端的函数呢?
在html的脚本中添加iframe对象,通过设置iframe的src属性,可成功触发WKWebview中的代理方法调用。
webView:decidePolicyForNavigationAction:decisionHandler:
常见的方式就是在脚本函数中设置iframe的src属性值,触发WKWebview的代理函数调用,
我们可以在代理方法中拦截请求,首先iframe的src的值也就是我们自定义的scheme,通过对该scheme的判断来得知我们想干什么,从而去调用app中对应的函数。除了可以在自定义scheme中传递我们需要的参数外,我们可以在html中的脚本中把数据储存好,通过evaluateJavaScript:completionHandler:来调用脚本函数来返回需要的参数。该参数会在completionHandler的回调函数中以字符串返回,通常是用NSJSONSerialization来解析。
具体如何通过WKWebview传递过来的数据来判断该执行哪个函数,有一种实现方式:
用一个字典来储存对应函数地址,这样我们可以通过传递过来的key来获得对应的函数。