h5和android互相调用,Android(H5)互相调用方法

记录一下前面混合开发时很重要的java与js互调方法进行数据交互。

混合开发就需要webview这个控件了

这就很玄学了,哈哈哈

这篇文章https://www.jianshu.com/p/3d9a93c9fea2可以看看

先来设置一下webview。WebSettings用于管理WebView状态配置

public static booleanWebViewSetting(Activity activity, WebView webview) {final WebSettings webSettings =webview.getSettings();

webSettings.setDomStorageEnabled(true);//主要是这句

webSettings.setJavaScriptEnabled(true);//启用js

webSettings.setBlockNetworkImage(false);//解决图片不显示

webSettings.setSavePassword(false);

webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

webSettings.getSettings().setBuiltInZoomControls();//设置是否支持缩放

webSettings.addJavascriptInterface(obj,str);//向html页面注入java对象

webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放

webSettings.setLoadWithOverviewMode(true);//页面支持缩放:

webSettings.setJavaScriptEnabled(true);

webSettings.setBuiltInZoomControls(true);

webUrl.requestFocusFromTouch();//如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。

webSettings.setJavaScriptEnabled(true); //支持js

webSettings.setUseWideViewPort(false); //将图片调整到适合webview的大小

webSettings.setSupportZoom(true); //支持缩放 webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//支持内容重新布局

webSettings.supportMultipleWindows(); //多窗口

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存

webSettings.setAllowFileAccess(true); //设置可以访问文件

webSettings.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点

webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口

webSettings.setLoadWithOverviewMode(true); //缩放至屏幕的大小

webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片//让JavaScript可以自动打开windows设置允许JS弹窗

webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//设置缓存

webSettings.setAppCacheEnabled(false);//设置缓存模式,一共有四种模式//webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//设置缓存路径

webSettings.setAppCachePath("");//支持缩放(适配到当前屏幕)

webSettings.setSupportZoom(true);//将图片调整到合适的大小

webSettings.setUseWideViewPort(true);//支持内容重新布局,一共有四种方式//默认的是NARROW_COLUMNS

webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//设置默认字体大小

webSettings.setDefaultFontSize(12);//支持缩放

webSettings.setSupportZoom(false);//设置支持两指缩放手势

webSettings.setBuiltInZoomControls(false);return true;

}

下面重要的来了

addJavascriptInterface是WebKit的原生API,属于WebView对象的公共方法,用于暴露一个java对象给js,使得js可以直接调用方法。

由于它不安全,4.2后新增了@JavascriptInterface注解

还有个框架:https://github.com/lzyzsd/JsBridge  ---这个项目在Java和JavaScript之间架起了桥梁。

现在要开始加载页面了 webview.loadUrl("https://www.baidu.com/");

@SuppressLint("JavascriptInterface")private voidinitMixedPage() {//封装webview

NativeWebViewUtil nativeWebViewUtil = newNativeWebViewUtil();

nativeWebViewUtil.WebViewSetting(this,webview);//添加Javascript的映射

webview.addJavascriptInterface(this,"android");

webview.loadUrl("https://www.baidu.com");

webview.setWebViewClient(newWebViewClient(){

@Overridepublic voidonPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//加载页面

}

@Overridepublic voidonPageFinished(WebView view, String url) {super.onPageFinished(view, url);//加载结束

webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback() {

@Overridepublic voidonReceiveValue(String value) {//此处为 js 返回的结果

Log.v("Native",value);

}

});

}

});

}

没有回掉可以写null.

第一、Android调用js

有两个很重要的方法setWebChromeClient和setWebClient

setWebChromeClient主要处理解析,渲染网页等浏览器做的事情

WebChromeClient是辅助WebView处理Javascript的对话框等

要调用js就要等webview加载完成后再调用js方法

webview.setWebViewClient(newWebViewClient(){

@Overridepublic voidonPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//加载页面

}

@Overridepublic voidonPageFinished(WebView view, String url) {super.onPageFinished(view, url);//加载结束js 方法 get_android_base

webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback() {

@Overridepublic voidonReceiveValue(String value) {//此处为 js 返回的结果

Log.v("Native",value);

}

});

}

});

javascript代码

接收android发来的数据

functionget_android_base(base){

alert(base);

}

第二、js调用Android

javascrip代码

js的一个方法 get_data()

window.android.get_data("mcontrol");

Android代码

@JavascriptInterfacepublic voidget_data(String base){

Log.d(TAG,base);

}

到这里,简单的互调就完成了。

互调就很玄学,总是有各种各样的问题哈哈哈。

后面再记录下腾讯的webview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值