关闭

Android和html5的js交互

标签: Androidhtmljs
241人阅读 评论(0) 收藏 举报
分类:

最近比较流行android和html5混合开发,那么彼此间的交互效果是少不了的,就是最基本的h5嵌套有的时候也需要彼此控制,那么该怎么实现呢?接下来看代码......

   

H5

/*

function ValueFromAndroid(obj){    

     document.getElementById("web").innerHTML=obj;

    }

function shareAnIos(){    //用于标识 比如登陆传login  我就调用android微信登陆 传wxapy 我就掉微信支付    var lei = "login";    try{      myObj.ValueFromJS(lei); //调用安卓 方法    }catch(error){      console.log(error)    }finally{    }}*/

Android

private static boolean isExit = false;

/**

 * WebView就是一个简单的浏览器,android浏览器源码存在于LINUX/android/package/apps/Browser

 * 里面的所有操作都是围绕WebView来展开的

 */

WebSettings settings = wv_hry.getSettings();

// 设置编码

settings.setDefaultTextEncodingName("utf-8");

// 是否支持支持js

settings.setJavaScriptEnabled(true);

// 是否支持保存密码

settings.setSavePassword(false);

// 是否支持保存数据

settings.setSaveFormData(false);

// 是否支持访问文件数据

settings.setAllowFileAccess(true);

settings.setDomStorageEnabled(true);

// 调整到原webview的大小

settings.setUseWideViewPort(true);

// 支持自动加载图片

settings.setLoadsImagesAutomatically(true);

// 是否支持缩放

settings.setSupportZoom(false);

// 设置背景颜色 透明

wv_hry.setBackgroundColor(Color.argb(0, 0, 0, 0));

 

// 设置本地调用对象及其接口

wv_hry.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");

// 载入js,对应当前projectasserts目录

// 也可以写file:///sdcard/index.html

wv_hry.loadUrl("http://139.224.56.54/hry/index.php");

wv_hry.setWebViewClient(new SimonWebViewClient());

//处理h5弹框

wv_hry.setWebChromeClient(new WebChromeClient() {

@Override

public boolean onJsAlert(WebView view, String url, String message,

JsResult result) {

return super.onJsAlert(view, url, message, result);

}

});

//非点击时获取数据和传送数据

wv_hry.post(new Runnable() {

@Override

public void run() {

String url = wv_show.getUrl();

String title = wv_show.getTitle();

}

});

}

 

/**

 * js传递数据

 * @param view

 */

public void clickButton(View view) {

wv_hry.loadUrl("javascript:ValueFromAndroid('" + "simon" + "')");

}

 

/**

 * 获取js数据

 * @author Simon

 */

class JavaScriptObject {

Context mContxt;

 

public JavaScriptObject(Context mContxt) {

this.mContxt = mContxt;

}

 

/**

 * 返回的字符串数量不限

 * @param value1

 */

@JavascriptInterface

public void ValueFromJS(String value1, String value2) {

Log.i("Simon", "-------------------" + "value1 = " + value1

+ " value2 = " + value2);

}

}

 

class SimonWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

}

 

/**

 * 双击退出

 */

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

String currentUrl = wv_hry.getUrl();

String firstUrl = "http://139.224.56.54/hry/index.php";

String secondeUrl = "http://139.224.56.54/hry/index.php/earnings";

String thirdUrl = "http://139.224.56.54/hry/index.php/service";

String fourthUrl = "http://139.224.56.54/hry/index.php/mine";

if (currentUrl.equals(firstUrl) || currentUrl.equals(secondeUrl)

|| currentUrl.equals(thirdUrl)

|| currentUrl.equals(fourthUrl)) {

exit();// 这里也可以弹出对话框

} else {

wv_hry.canGoBack();

wv_hry.goBack();

}

 

}

return false;

}

 

private void exit() {

if (!isExit) {

isExit = true;

Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show();

new Timer().schedule(new TimerTask() {

@Override

public void run() {

isExit = false;

}

}, 2000);

} else {

finish();

}

}


DEMO:点击打开链接


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29784次
    • 积分:917
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:2篇
    • 译文:7篇
    • 评论:0条