您的位置:首页 > 移动开发 > Android开发

Android demo-->webview实现js交互

2017-02-23 10:57 447 查看
1、将WebView这个控件添加到布局中去

2、对WebView进行一些初始化工作

// 设置WebView属性,能够执行Javascript脚本
webView.getSettings().setJavaScriptEnabled(true);
//webview提供的传入js的方法
webView.addJavascriptInterface(new TestPlugin(this,tv,btnLeft,btnRight, webView), "SysClientJs");
//载入html页面webView.loadUrl("file:///android_asset/plugin.html");


plugin.html存放在工程文件assets目录下

3、获取java数据

单独创建一个接口,作为处理java与js的数据交互的桥梁,类名为TestPlugin

public class TestPlugin  {

private Activity mContext;
private TextView tv;
private Button leftBtn;
private Button rightBtn;
private WebView webView;

public TestPlugin(Activity mContext,TextView tv,Button leftBtn,Button rightBtn,WebView webView){
this.mContext=mContext;
this.tv=tv;
this.leftBtn=leftBtn;
this.rightBtn=rightBtn;
this.webView=webView;
}

//因为安全问题,在Android4.2中(如果应用的android:targetSdkVersion数值为17+)JS只能访问带有 @JavascriptInterface注解的Java函数。
//通过引入 @JavascriptInterface注解,则在JS中只能访问 @JavascriptInterface注解的函数。这样就可以增强安全性。
@JavascriptInterface
public void initPageTitle(String str){
Log.d("gt","params "+str);
try {
JSONObject jsonObject=new JSONObject(str);
final String title=jsonObject.getString("title");

JSONObject leftJson=jsonObject.getJSONObject("leftButton");
final boolean leftExist=leftJson.getBoolean("exist");
final String leftName=leftJson.getString("name");
final String leftfunc=leftJson.getString("func");

JSONObject rightJson=jsonObject.getJSONObject("rightButton");
final boolean rightExist=rightJson.getBoolean("exist");
final String rightName=rightJson.getString("name");
final String rightfunc=rightJson.getString("func");

mContext.runOnUiThread(new Runnable() {
@Override
public void run() {

tv.setText(title);

if(leftExist){
leftBtn.setVisibility(View.VISIBLE);
leftBtn.setText(leftName);
leftBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl("javaScript:"+handleJsFunc(leftfunc));
}
});
}else{
leftBtn.setVisibility(View.GONE);
}

if(rightExist){
rightBtn.setVisibility(View.VISIBLE);
rightBtn.setText(rightName);
rightBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.loadUrl("javaScript:"+handleJsFunc(rightfunc));
}
});
}else{
rightBtn.setVisibility(View.GONE);
}
}
});

} catch (JSONException e) {
e.printStackTrace();
}
}

/**
* 防止js注入
*/
public Object getClass(Object o) {
return null;
}

/**
* 处理js回调函数,如果函数不带括号,就加上括号
*/
public String handleJsFunc(String func) {
String handledFunc = func;
if (!func.endsWith(")")) {
handledFunc += "()";
}
return handledFunc;
}
}


项目名称:HNInteractiveDemo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: