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

Js 与Android WebView

2015-11-16 16:39 465 查看

一、JS调用Android Java交互

1、WebView初始化及配置:

private void initWebView() {
//配置可与JS交互
wb.getSettings().setJavaScriptEnabled(true);
//配置协议agreement
wb.addJavascriptInterface(new BIDYCAgreetment(context, handler), "agreement");

wb.getSettings().setAllowFileAccess(true);
wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wb.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
// 支持缩放 V4.9 add by Able  先注释,可能5.0或许会打开 续:V5.1打开的
wb.getSettings().setBuiltInZoomControls(true);
wb.getSettings().setSupportZoom(true);
// 电脑网页最小化适配手机屏幕 V4.9 add by Able  先注释,可能5.0或许会打开 续:V5.1打开的
wb.getSettings().setUseWideViewPort(true);
wb.getSettings().setLoadWithOverviewMode(true);

WebSettings setting = wb.getSettings();
// 因为zhizao.tudou.com打不开图片-start
setting.setDomStorageEnabled(true);
setting.setAppCacheMaxSize(1024 * 1024 * 8);
setting.setAppCacheEnabled(true);
// 因为zhizao.tudou.com打不开图片-end

setting.setCacheMode(WebSettings.LOAD_NO_CACHE);
setting.setNeedInitialFocus(false);
setting.setSaveFormData(true);
setting.setSavePassword(false);
wb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//不跳至其他浏览器,在本页面加载url
wb.loadUrl(url);
return true;
}

@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Loading.show(context);

}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
handler.sendEmptyMessage(MESSAGE_LOAD_SUCCESS);
Loading.dismiss();
}

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
YoukuLoading.dismiss();
handler.sendEmptyMessage(MESSAGE_TIME_OUT);
}
});

wb.requestFocus();
wb.loadUrl("http://csi.xxxxx.com/mdyc/index.php");
}


2、定义交互协议类:

public class BIDYCAgreetment {
public static final int HIDENAV = 10;
public static final int ActiveNAV1 = 11;
public static final int ActiveNAV2 = 12;
public static final int ActiveNAV3 = 13;

private Context context;
private Handler mHandler;

public BIDYCAgreetment(Context context, Handler handler) {
this.context = context;
this.mHandler = handler;
}

@JavascriptInterface
public void hidenav() {
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
Logger.d("js-----","----->hidenav");
if (mHandler != null) {
mHandler.sendEmptyMessage(HIDENAV);
}
}
//定义JS交互接口,交互方法activenav(),交互参数nav1,nav2
@JavascriptInterface
public void activenav(final  String nav1, final String nav2) {
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
if (mHandler!=null){
Message msg3 =new Message();
msg3.obj=nav2;
msg3.what=ActiveNAV3;
mHandler.sendMessage(msg3);

Message msg2=new Message();
msg2.obj=nav1;
msg2.what=ActiveNAV2;
mHandler.sendMessage(msg2);
}
}

@JavascriptInterface
public void activenav(final String nav1){
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
if (mHandler != null) {
Message msg1=new Message();
msg1.obj=nav1;
msg1.what=ActiveNAV1;
mHandler.sendMessage(msg1);
}
}
}
3、Js中的相关定义

<script>
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios
var url = 'agreement::activenav:nav1=4&nav2=3';
sendUrlToNative(url);
}else{//android
window.agreement.activenav(4,3);//Android 定义传递协议、及方法、参数形式
}
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: