Android webview和HTML的JS交互
1、webView加载页面
我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:
//例如:加载assets文件夹下的test.html页面
mWebView.loadUrl("file:///android_asset/test.html")
//例如:加载网页
mWebView.loadUrl("http://www.baidu.com")
如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置setWebViewClient:
mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {mWebView.loadUrl(url);return true;}}});
2、Android本地通过Java调用HTML页面中的JavaScript方法
想要调用js方法那么就必须让webView支持
WebSettings webSettings = mWebView.getSettings();//设置为可调用js方法webSettings.setJavaScriptEnabled(true);
若调用的js方法没有返回值,则直接可以调用mWebView.loadUrl("javascript:do()");其中do是js中的方法;若有返回值时我们可以调用mWebView.evaluateJavascript()方法:
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {Log.e(TAG, "onReceiveValue value=" + value);}});
js代码如下:
<script type="text/javascript">function sum(a,b){return a+b;}function do(){document.getElementById("p").innerHTML="hello world";}
</script>
2、js调用Android本地Java方法
在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法
public class JsInteration {@JavascriptInterfacepublic String back() {return "hello world";}
}
定义完这个方法后再调用mWebView.addJavascriptInterface()方法:
mWebView.addJavascriptInterface(new JsInteration(), "android");
那么在js中怎么来调用呢?
<script type="text/javascript">function s(){//调用Java的back()方法var result =window.android.back();document.getElementById("p").innerHTML=result;}</script>
4、拦截HTML页面中的点击事件
mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {//判断url拦截事件if (url.equals("file:///android_asset/test2.html")) {Log.e(TAG, "shouldOverrideUrlLoading: " + url);startActivity(new Intent(MainActivity.this,Main2Activity.class));return true;} else {mWebView.loadUrl(url);return false;}}});
以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码:
mainActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView = (WebView) findViewById(R.id.webView);mWebView.loadUrl("file:///android_asset/test.html");WebSettings webSettings = mWebView.getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(new JsInteration(), "android");mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.equals("file:///android_asset/test2.html")) {Log.e(TAG, "shouldOverrideUrlLoading: " + url);startActivity(new Intent(MainActivity.this,Main2Activity.class));return true;} else {mWebView.loadUrl(url);return false;}}});
}
//Android调用有返回值js方法
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onClick(View v) {mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {@Overridepublic void onReceiveValue(String value) {Log.e(TAG, "onReceiveValue value=" + value);}});
}
public class JsInteration {@JavascriptInterfacepublic String back() {return "hello world";}
}
}
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">function sum(a,b){return a+b;}function s(){var result =window.android.back();document.getElementById("p").innerHTML=result;}</script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>
作者:YouJZ
链接:https://www.jianshu.com/p/a25907862523
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Android webview和HTML的JS交互相关推荐
- android和ios HybridApp的js交互
android的webview和js交互 https://github.com/chenhaifeng2016/AndroidWebview ios的uiwebview和js交互 https://gi ...
- android封装全局调用的toast_【Android】Android中WebView实现Java与JS交互
现在混合式开发是大趋势,H5不断蚕食移动互联网的份额,有的公司甚至只用H5就搞了一个APP,我们搞Android的不说会点H5,至少要懂怎么和H5(和JavaScript)交互,费话不多说. 一.先看 ...
- android webview js 失效,Android WebView注入JQuery、JS脚本及执行无效的问题解决
在项目中遇到JQuery注入后,执行无效的问题. 我们知道必须在网页加载完成后,也就是在onPageFinished()方法被调用后才能执行被注入的JS. 但是在有些手机上并不能成功执行,我的解决方案 ...
- flutter webview浏览器及与js交互、打开第三方app
添加pubspec.yaml依赖 url_launcher: ^5.4.1 webview_flutter: ^0.3.18+1 --------------main.dart import 'pac ...
- Android—WebView与JS交互
Html文件: WebView与JS交互方式: 1. 前提: WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSet ...
- Android开发-Android原生与WebView的js交互的实现
前 言 一般在Android应用的开发过程中,一些核心的业务功能开发往往需要Android原生的开发,一些需要改动比较频繁的功能且不是核心的业务功能往往只需要在Android应用调用一个网页就行了.在 ...
- android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
我们在开发需求的时候,难免会接入一下第三方的H5页面,有些H5页面是具有上传照片的功能,Android 中的 WebView是不能直接打开文件选择弹框的 接下来我讲简单提供一下解决方案,先说一下思路 ...
- Android webview 加载的html 无法显示弹框
WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSettings.setJavaScriptEnabled(true ...
- android webview js交互,响应webview图片的响应事件
2019独角兽企业重金招聘Python工程师标准>>> 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地址后,开启一个遮罩activit ...
最新文章
- html javascript 引号
- Highmaps网页图表教程之数据标签与标签文本
- 记录一个ansible高级用法与shell结合
- Hbase的shell出现wrong number of arguments xxx以及undefined method any?for xxxx
- 毕业半年,码过5个城市
- 阿里云盘内测_阿里云盘内测邀请码发放
- glassfish启动后不能进入部署页面_Spring Boot 热部署
- 阿里开源物联网操作系统 AliOS Things 3.0 发布,集成平头哥 AI 芯片架构!
- linux升windows10,Windows 10免费升级计划的利与弊
- 高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)
- sqlserver按'一二三四五'排序(hibernate对中文数字进行排序)
- python飞机大战源码素材包_Python飞机大战实战项目案例
- 计算机怎么求标准偏差,如何计算Excel标准偏差?您必须知道这两个技巧
- 爆锤数据结构(期末复习笔记)
- 支付宝网页端支付接口实现案例流程
- PDF文件转换文件格式
- 你好,WeDataSphere!
- python综合应用题 论语 230322
- GStreamer - On Windows
- 对于文字设置超出部分隐藏
热门文章
- 四均线交易系统(Four Set of MA Crossover System)
- Chrome 55 浏览器推出 Android 离线下载功能
- vs2008简体中文正式版下载
- 理解np.max、np.min、np.argmax、np.argmin以及np.sum中的axis参数
- 让理科生沉默,让文科生流泪的综合题详解
- 北京理工大学抢课教程
- 单片机中断系统(部分以AT89S52为例)
- 漫说从打工者到企业家的蜕变过程所碰到的问题及解决方案
- android如何获取RAM和ROM使用情况
- PostgreSQL是世界上最好的数据库