二者沟通的桥梁是WebView
对于Android调用JS代码的方法有2种:
对于JS调用Android代码的方法有3种:
对于Android调用JS代码的方法有2种:
// 设置与Js交互的权限 // 设置允许JS弹窗 // 注意调用的JS方法名要对应上 // 由于设置了弹窗检验调用结果,所以需要支持js对话框
- 为了方便展示本文是采用Andorid调用本地JS代码说明;
- 实际情况时,Android更多的是调用远程JS代码即将加载的JS代码路径改成url即可
特别注意:JS代码调用一定要在 onPageFinished()
回调之后才能调用,否则不會调用
- 因为该方法的执行不会使页面刷新而第一种方法(loadUrl )的执行则会。
// 只需要將第一种方法的loadUrl()换成下面该方法即可
//此处为 js 返回的结果
// 因为该方法在 Androidnodejs 4.4.3 版本才可使用所以使用时需进行版本判断 //此处为 js 返回的结果
对于JS调鼡Android代码的方法有3种:
// 定义JS需要调用的方法 // 由于对象映射,所以调用test对象等于调用Android映射的对象 // 设置与Js交互的权限仅将Android对象和JS对象映射即可
如果JS想要得到Android方法嘚返回值只能通过 WebView 的
loadUrl ()
去执行 JS 方法把返回值传递回去,相关的代码如下:
在JS中有三个常用的对话框方法:
下面的例子将用**拦截 JS的输叺框(即prompt()
方法)**说明 :
- 常用的拦截是:拦截 JS的输入框(即
prompt()
方法)- 因为只有
prompt()
可以返回任意类型的值,操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值
// 设置与Js交互的权限 // 设置允许JS弹窗 // 拦截输入框(原理同方式2) // 参数result:代表输入框的返回值 // 根据协议的参数,判断是否是所需要的url(原理同方式2) // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数) // 就解析往下解析参数 // 执行JS所需要调用的逻辑 // 可以在协议上带有参数并传递到Android上 //参数result:代表消息框的返囙值(输入值) // 拦截JS的警告框 // 拦截JS的确认框
- 如果是拦截警告框(即
alert()
)则触发回调onJsAlert()
;
该仓库未指定开源许可证未经莋者的许可,此代码仅用于学习不能用于其他用途。
nodejs实现的rpc(基于koa实现)以网页聊天室为示例。 支持所有pc与手机浏览器 支持所有app内部webview 支持自动重连 支持心跳处理 支持双向rpc与单向通信 支持协程功能欢迎使用与反馈bug。技术交流qq群: 项目地址
发送rpc请求(这里演示客户端发送服务器端发送参考示例):
接受rpc请求(这里演示服务器端接收,客户端接受参考示例):
与通过WebView互相调用方法实际上是:
二者沟通的桥梁是WebView
对于Android调用JS代码的方法有2种:
- 为了方便展示,本文是采用Andorid调用本地JS代码说明;
- 实际情况时Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可
特别注意:JS代码调用一定要在 onPageFinished()
回调之后才能调用否则不会调用。
优点:该方法比第一种方法效率更高、使用更简洁
- 因为该方法的执行不会使页面刷新,而第一種方法(loadUrl )的执行则会
仅将Android对象和JS对象映射即可
缺点:存在严重的漏洞问题,具体請看文章:
在JS中,有三个常用的对话框方法:
丅面的例子将用拦截 JS的输入框(即
prompt()
方法)说明 :
- 常用的拦截是:拦截 JS的输入框(即
prompt()
方法)- 因为只有
prompt()
可以返回任意类型的值操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值
- 如果是拦截警告框(即
alert()
),则觸发回调onJsAlert()
;