Android JS 安全注入改进版
来源:互联网 发布:傅园慧网络直播平台 编辑:程序博客网 时间:2024/06/17 00:07
开源项目地址:Android-JS-Inject
让android的js注入更加简单,更加方便在 java与js端互传回调函数。
下面是一个简单的例子,完整代码和详细的使用方法见源项目,里面有demo。
FunctionActivity.java
package com.test.android.injectjs.demofunction;import android.app.Activity;import android.os.Bundle;import android.os.PersistableBundle;import android.webkit.WebView;import android.widget.Toast;import com.chenyg.androidjs.*;/** * 测试java与js之间的函数的传递。 */public class FunctionActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wv = new WebView(this); setContentView(wv); WEBUtil.defaultSettings(wv); Java2JsCallback java2JsCallback = new Java2JsCallback(new WEBViewImpl(wv)) { @Callback public void callback(String content) { Toast.makeText(FunctionActivity.this, content, Toast.LENGTH_SHORT).show(); } }; java2JsCallback.setPermanent(true); wv.setWebChromeClient( new WEBChromeClient(false, true, new JsCallJava.InjectObj("demo.fun", new Js1(java2JsCallback)))); wv.loadUrl("file:///android_asset/test-fun/test.html"); }}
Js1.java
package com.test.android.injectjs.demofunction;import android.widget.Toast;import com.chenyg.androidjs.Java2JsCallback;import com.chenyg.androidjs.JsCallback;import com.chenyg.androidjs.WEBView;import org.json.JSONArray;import org.json.JSONObject;/** */public class Js1{ private Java2JsCallback java2JsCallback; public void toast(WEBView webView, String message) { Toast.makeText(webView.getContext(), message, Toast.LENGTH_SHORT).show(); } /** * @param java2JsCallback 用于动态传递到js端的java函数对象。 */ public Js1(Java2JsCallback java2JsCallback) { this.java2JsCallback = java2JsCallback; } /** * js函数直接作为java函数参数。 * * @param view * @param callback */ public void jsFun(WEBView view, JsCallback callback) { try { callback.apply(); } catch (Exception e) { e.printStackTrace(); } } /** * js函数作为json对象的内部变量。 * * @param view * @param jsonObject */ public void jsFun(WEBView view, JSONObject jsonObject) { try { JsCallback callback = (JsCallback) jsonObject.get("callback"); callback.apply(); } catch (Exception e) { e.printStackTrace(); } } /** * js函数作为json数组的元素。 * * @param view * @param jsonArray */ public void jsFunArray(WEBView view, JSONArray jsonArray) { try { JsCallback callback = (JsCallback) jsonArray.get(0); callback.apply(); } catch (Exception e) { e.printStackTrace(); } } /** * js函数作为json对象的json数组的元素。 * * @param view * @param jsonObject */ public void jsFunArray(WEBView view, JSONObject jsonObject) { try { JsCallback callback = (JsCallback) jsonObject.getJSONArray("array").get(0); callback.apply(); } catch (Exception e) { e.printStackTrace(); } } /** * 直接传递java函数对象。 * * @param view * @param callback */ public void sendJavaFun(WEBView view, JsCallback callback) { try { callback.apply(java2JsCallback); } catch (JsCallback.JsCallbackException e) { e.printStackTrace(); } } /** * java函数对象作为json对象的一个变量。 * * @param view * @param callback */ public void sendJavaFunInJson(WEBView view, JsCallback callback) { try { JSONObject jsonObject = new JSONObject(); jsonObject.put("callback", java2JsCallback); callback.apply(jsonObject); } catch (Exception e) { e.printStackTrace(); } }}
test.html
<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>函数相关的测试</title> <meta name="author" content="Yanyuetian"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1, target-densitydpi=medium-dpi, user-scalable=no"> <link href="../default.css" rel="stylesheet" type="text/css"/> <script src="../jquery-2.2.3.min.js" type="text/javascript"></script> <script src="../inject.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ console.log("ready!"); window.injectReady(false,function(){ demo.fun.toast('js已注入成功!'); }); }); </script></head><body><div class="blog-header"> <h3>函数相关的测试</h3></div><ul class="entry"> <li> js函数直接作为java函数参数<br/> 代码:<br/> <div> demo.fun.jsFun(function(){ alert('js函数直接作为java函数参数'); }); </div> <button onclick="demo.fun.jsFun(function(){alert('js函数直接作为java函数参数');});">测试</button> </li> <br/> <li> js函数作为json对象的内部变量<br/> 代码:<br/> <div> demo.fun.jsFun({ 'callback':function(){ alert('js函数作为json对象的内部变量'); } }); </div> <button onclick="demo.fun.jsFun({'callback':function(){alert('js函数作为json对象的内部变量');}});">测试</button> </li> <br/> <li> js函数作为json数组的元素<br/> 代码:<br/> <div> demo.fun.jsFunArray([function(){ alert('js函数作为json数组的元素'); }]); </div> <button onclick="demo.fun.jsFunArray([function(){alert('js函数作为json数组的元素');}]);">测试</button> </li> <br/> <li> js函数作为json对象的json数组的元素<br/> 代码:<br/> <div> demo.fun.jsFunArray({ 'array':[function(){ alert('js函数作为json对象的json数组的一个元素'); }] }); </div> <button onclick="demo.fun.jsFunArray({'array':[function(){alert('js函数作为json对象的json数组的一个元素');}]});">测试</button> </li> <br/> <li> 直接传递java函数对象<br/> 代码:<br/> <div> demo.fun.sendJavaFun(function(javaCall){ javaCall('直接传递java函数对象'); }); </div> <button onclick="demo.fun.sendJavaFun(function(javaCall){javaCall('直接传递java函数对象');});">测试</button> </li> <br/> <li> java函数对象作为json对象的一个变量<br/> 代码:<br/> <div> demo.fun.sendJavaFunInJson(function(obj){ obj.callback('java函数对象作为json对象的一个变量'); }); </div> <button onclick="demo.fun.sendJavaFunInJson(function(obj){obj.callback('java函数对象作为json对象的一个变量');});">测试 </button> </li></ul></body></html>
图1
图2
图3
0 0
- Android JS 安全注入改进版
- Android安全:代码注入
- Android安全:代码注入
- Android webview 注入JS
- Android WebView JS的注入
- 【网站安全】简单的Js脚本攻击sql注入攻击
- 【Android安全研究笔记】-Android 应用程序框架安全机制研究及改进
- Android4.3安全改进
- android反编译步骤改进版
- android 注入js的基本使用
- Android中向webview注入js代码
- 【Android实测】WebView的JS注入
- Android Webview js或css 替换 注入
- Android在WebView中注入Js代码
- js图片库——改进版
- PDF.JS+JAVA跨域改进版
- LBE 安全大师支持android 4.4注入分析
- Android静态安全检测 -> Fragment注入攻击漏洞
- MySQL: MyISAM和InnoDB的区别
- C++递归求斐波那契数列
- SpringAOP的实现过程
- android布局属性大全
- MySQL死锁问题实例分析及解决方法(主要是SQL语句可能会产生的问题)
- Android JS 安全注入改进版
- AES密码算法
- Java 素数
- 排序算法代码总结
- centos6.7更换源
- mysql 解除正在死锁的状态
- RxJava(一) create操作符的用法和源码分析
- centos7安装eclipse
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例