如题所述
通讯方法如下:
URL Scheme 是最常见的方法了,它的核心概念是拦截URL。
APP实现了一个webview,H5在其内打开。
它可以拦截到H5发生的跳转信息,如URL。如果以URL作为通信依据,就可以随意约定个URL,如:建立通信:https://__bridge_loaded__ 获取token:https://nativaAPI_getToken
H5就可以通过跳转到该地址被APP拦截,APP识别到了约定的URL触发对应方法。
2. 拦截打印日志
APP的webview有对应的监听,可以拦截到JS的 alert 等。就可通过输出 alert("标识", "方法名", "参数") 等方法进行通信。IOS 由于安全限制,UIWebView 性能原因已弃用不考虑,WKWebView 对 alert 等方法做了拦截,需要做代理处理一下即可。Android 通过 WebView.addJavascriptInterface 方法实现。但因 Android 4.2 以前的系统中没有正确限制使用WebView.addJavascriptInterface,导致攻击者可以伪造JS桥接调用原生方法,存在安全漏洞,因此较少见。Google在Android 4.2 版本中修复了他,通过在Java方法内的最上面声明一句@JavascriptInterface,从而避免漏洞攻击。若想 4.2 版本前使用就要另寻出路,window.prompt 一问一答的机制恰好可以满足,Android onJsPrompt方法中去解析传递过来的文本,将处理结果返回给JS。
3. window注入
window注入就比较好理解了,就是双方在JS的window下写入通信变量。其实上面两种方法也多少会涉及window注入。它是一个对象,常用的有这几个方法(想用什么自己写入)。
URL Scheme 是最常见的方法了,它的核心概念是拦截URL。
APP实现了一个webview,H5在其内打开。
它可以拦截到H5发生的跳转信息,如URL。如果以URL作为通信依据,就可以随意约定个URL,如:建立通信:https://__bridge_loaded__ 获取token:https://nativaAPI_getToken
H5就可以通过跳转到该地址被APP拦截,APP识别到了约定的URL触发对应方法。
2. 拦截打印日志
APP的webview有对应的监听,可以拦截到JS的 alert 等。就可通过输出 alert("标识", "方法名", "参数") 等方法进行通信。IOS 由于安全限制,UIWebView 性能原因已弃用不考虑,WKWebView 对 alert 等方法做了拦截,需要做代理处理一下即可。Android 通过 WebView.addJavascriptInterface 方法实现。但因 Android 4.2 以前的系统中没有正确限制使用WebView.addJavascriptInterface,导致攻击者可以伪造JS桥接调用原生方法,存在安全漏洞,因此较少见。Google在Android 4.2 版本中修复了他,通过在Java方法内的最上面声明一句@JavascriptInterface,从而避免漏洞攻击。若想 4.2 版本前使用就要另寻出路,window.prompt 一问一答的机制恰好可以满足,Android onJsPrompt方法中去解析传递过来的文本,将处理结果返回给JS。
3. window注入
window注入就比较好理解了,就是双方在JS的window下写入通信变量。其实上面两种方法也多少会涉及window注入。它是一个对象,常用的有这几个方法(想用什么自己写入)。
温馨提示:答案为网友推荐,仅供参考