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

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

这就很玄学了,哈哈哈

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

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

public static boolean WebViewSetting(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 void initMixedPage() { //封装webview
NativeWebViewUtil nativeWebViewUtil = new NativeWebViewUtil();
nativeWebViewUtil.WebViewSetting(this,webview);
//添加Javascript的映射
webview.addJavascriptInterface(this,"android");
webview.loadUrl("https://www.baidu.com");
webview.setWebViewClient(new WebViewClient(){ @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面
} @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url); // 加载结束
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
}); }

没有回掉可以写null.

第一、Android调用js

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

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

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

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

webview.setWebViewClient(new WebViewClient(){

            @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// 加载页面 } @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url); // 加载结束js 方法 get_android_base
webview.evaluateJavascript("javascript:get_android_base("aaa")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.v("Native",value);
}
});
}
});

javascript代码

接收android发来的数据

function get_android_base(base){
alert(base);
}

第二、js调用Android

javascrip代码

js的一个方法 get_data()

window.android.get_data("mcontrol");

Android代码

@JavascriptInterface
public void get_data(String base){
Log.d(TAG,base);
}

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

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

后面再记录下腾讯的webview

Android(H5)互相调用方法的更多相关文章

  1. AllJoyn+Android开发案例-android跨设备调用方法

    AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...

  2. Webview之H5页面调用android的图库及文件管理

    h5页面打开图片管理器 一般页面在pc打开文件管理器是用 type="file"的代码,可是这在android的webview是无效的,必须为webview设定WebChromeC ...

  3. android 中activity调用远程service中的方法之 aidl的使用

    服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件  (对应本地调用中的接口文件 ...

  4. Eclipse中Android公共库的正确建立及调用方法

    Eclipse中Android公共库的正确建立及调用方法 引言 之前一直头痛于没有办法在多个程序中共享资源,用作公共类库的方法也是使用的导出jar再导入的办法,现在终于初步搞明白了,可算解脱了~,分享 ...

  5. 在Android Studio中调用so中的方法

    本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...

  6. android与JS交互,互相调用方法,跳转到网页

    在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...

  7. 安卓端调用h5界面js方法和ios端调用h5界面js方法

      备注:本人为h5开发人员,不懂安卓和ios,这是开发小伙伴对接联调的主代码. 1.iOS端调用h5界面js方法:     2.安卓端调用h5界面js方法: @Override    protect ...

  8. 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

    安卓开发解决android.os.NetworkOnMainThreadException异常方法 2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  | ...

  9. Android H5调起原生微信或支付宝支付

    Android H5调起原生微信或支付宝支付 WebView调用原生微信或支付宝回调:其原理就是在shouldOverrideUrlLoading(final WebView view, String ...

随机推荐

  1. 经典算法之归并排序——python和JS实现

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  2. stand up meeting 11/19/2015

    队员 今日工作 工作耗时/h 明日计划 计划耗时/h 冯晓云 利用昨天编写的调用必应词典API的DLL,完成了UWP版本查词APP的试水,证实了DLL可调和在线查词的可行性:和其他部分的同学就接口数据 ...

  3. Django文档阅读-Day1

    Django文档阅读-Day1 Django at a glance Design your model from djano.db import models #数据库操作API位置 class R ...

  4. python3 xlwt,csv学习

    前言 对于抓取一些站点分析然后指纹识别的时候可能用到到它.所以学习下.这里就记录一些最基本的感觉有用的. xlwt 基本创建 demo: #coding=utf- import xlwt yunyin ...

  5. [PHP][linux] 命令行脚本接收传入参数的

    第一种 :用{ $argv }接受参数 第二种 : getopt() 第三种:

  6. 最全的 API 接口集合

    对于程序员来说,为自己的程序选择一些合适的API并不是那么简单,有时候还会把你搞得够呛,今天猿妹要和大家分享一个开源项目,这个项目汇集了各种开发的api,涵盖了音乐.新闻.书籍.日历等,无论你是从事W ...

  7. 前端面试的那些事儿(1)~JavaScript 原始数据类型

    前言 自我总结面试常问的一些细节,方便不断回顾与补充.第一次发表文章,如有问题或不足之处望及时指出. JavaScript 原始数据类型 1.1 基础数据类型 7大基础数据类型 boolean nul ...

  8. 单线程下实现IO切换

    1.Greenlet greenlet可以实现两个任务之间的来回切换,但遇到IO会阻塞,不会切(使用这个模块之前需要在电脑命令提示符中输入 pip3 install greenlet 进行安装) 例如 ...

  9. jdk1.7和jdk1.8在接口方面的改动

    1.JDK7及其之前,接口中都是抽象方法,且不能出现static方法 2.接口的变量都是public final static 全局静态常量,无变化 3.接口中可以添加非抽象方法(static),通过 ...

  10. 2、flink入门程序Wordcount和sql实现

    一.DataStream Wordcount 代码地址:https://gitee.com/nltxwz_xxd/abc_bigdata 基于scala实现 maven依赖如下: <depend ...