博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android WebView 总结,android webview总结
阅读量:6620 次
发布时间:2019-06-25

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

1.通过WebView的loadUrl()

2.通过WebView的evaluateJavascript()

public static void runJsFunc(WebView webView,String funcName,@Nullable ValueCallback callback, Object... params){

if(TextUtils.isEmpty(funcName)){

return;

}

if(webView == null){

return;

}

StringBuilder builder = new StringBuilder(funcName);

builder.append("(");

if(params != null && params.length >0){

int len = params.length;

for (int i = 0; i

Object param = params[i];

String str = "";

if(param != null){

if(param instanceof String){

str = "\""+param.toString()+"\"";

}else {

str = param.toString();

}

}

builder.append(str);

if(i != len-1){

builder.append(",");

}

}

}

builder.append(")");

String jsFunc = builder.toString();

XLogUtil.d("jsFunc:"+jsFunc);

webView.post(() -> {

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){

//4.4版本以上,调用带返回值js方法

webView.evaluateJavascript(jsFunc, new ValueCallback() {

@Override

public void onReceiveValue(String value) {

XLogUtil.d("jsFunc :"+jsFunc +",onReceiveValue:"+value);

if(callback != null){

callback.onReceiveValue(value);

}

}

});

}else {

webView.loadUrl("javascript:" + jsFunc);

}

});

}

复制代码

JS调用 Android 代码的方法有3种:一般用第一种

1.通过WebView的addJavascriptInterface()进行对象映射

2.通过 WebViewClient 的shouldOverrideUrlLoading ()方法回调拦截 url

3.通过 WebChromeClient 的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS对话框alert()、confirm()、prompt() 消息

注意: js调用android时的安全性(addJavascriptInterface):

public static void keepsafe(WebView webView,boolean debugable){

if (Build.VERSION.SDK_INT > 10 &&Build.VERSION.SDK_INT < 17) {

webView.removeJavascriptInterface("searchBoxJavaBridge_");

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

WebView.setWebContentsDebuggingEnabled(debugable);

}

}

复制代码

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

你可能感兴趣的文章
BabeLua常见问题
查看>>
刚装上最新node,npm install报这个错误!求ndoe大神解答!!!
查看>>
iOS设置拍照retake和use按钮为中文简体
查看>>
Elasticsearch 基础概念知识
查看>>
Additional information: 对 COM 组件的调用返回了错误 HRESULT E_FAIL
查看>>
python -- ajax数组传递和后台接收
查看>>
Spring之AOP二
查看>>
压缩解压缩
查看>>
SPI协议及其工作原理浅析【转】
查看>>
ab和jmeter进行GET/POST压力测试的使用心得和比较
查看>>
Porting .Net RSA xml keys to Java
查看>>
用户命令切换-命令su
查看>>
检测 nginx.conf 是否配置正确
查看>>
[ReactVR] Add Lighting Using Light Components in React VR
查看>>
String hashCode 方法为什么选择数字31作为乘子
查看>>
最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...
查看>>
测试妹子的呐喊:为什么总是收不到推送?
查看>>
linux NFS
查看>>
Android性能优化:手把手带你全面了解 内存泄露 & 解决方案
查看>>
Jquery DataTable基本使用
查看>>