博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随便说说android的jsBridge
阅读量:6135 次
发布时间:2019-06-21

本文共 1464 字,大约阅读时间需要 4 分钟。

初衷

最初我们寻求bridge方案是基于H5和Native之间的桥接,首先想到的是jsBridge。两种方式:

  1. javaInterface 注入对象;

  2. alert/prompt/confirm 如我们所知,第1种方法在android 4.2以下存在XSS漏洞,具体是因为,往js的Window注入的是原始java对象,这就导致可以通过获取Class对象反射出任何对象进行调用,相当危险。

java代码

webView.addJavascriptInterface(new People(), "JsInterface");window.JsInterface.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);复制代码

然而4.2以上进行了处理,如果你尝试去调试,你会发现window.JsInterface不再是具体java实例,而是普通的js对象,然后通过对这个js对象的调用来和注入对象通信,中间加入了方法的过滤(@JavascriptInterface注解的方法)等等。

第2种方法相对来说保险一点兼容性也更强一点,我们可以和H5端共同确定 scheme:// 、 host、 以及path 来达到标志调用的唯一性。 此种做法另外也可分为两种:

  1. scheme:// 、 host、 以及path相关代码在开发阶段编写在Html,通过promrt触发android端的onJsPrompt()来解析。

  2. 把js代码通过webview.loadUrl(js)的方式注入到H5,如:

javascript:(function JsAddJavascriptInterface_(){    if (typeof(window.jsInterface)!='undefined') {            console.log('window.jsInterface_js_interface_name is exist!!');}     else {        window.jsInterface = {                    onButtonClick:function(arg0) {                 return prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onButtonClick',args:[arg0]}));            },                        onImageClick:function(arg0,arg1,arg2) {                 prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onImageClick',args:[arg0,arg1,arg2]}));            },        };    }}复制代码

往window注入了jsInterface对象,此jsInterface对象包含onButtonClick()函数和onImageClick函数。从而始window对象有了jsInterface对象,达到和 第一种几乎相似的效果,并且没有安全隐患,因为他仅仅是一个js对象不是java对象。

转载地址:http://raeua.baihongyu.com/

你可能感兴趣的文章
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>