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交互相关推荐

  1. android和ios HybridApp的js交互

    android的webview和js交互 https://github.com/chenhaifeng2016/AndroidWebview ios的uiwebview和js交互 https://gi ...

  2. android封装全局调用的toast_【Android】Android中WebView实现Java与JS交互

    现在混合式开发是大趋势,H5不断蚕食移动互联网的份额,有的公司甚至只用H5就搞了一个APP,我们搞Android的不说会点H5,至少要懂怎么和H5(和JavaScript)交互,费话不多说. 一.先看 ...

  3. android webview js 失效,Android WebView注入JQuery、JS脚本及执行无效的问题解决

    在项目中遇到JQuery注入后,执行无效的问题. 我们知道必须在网页加载完成后,也就是在onPageFinished()方法被调用后才能执行被注入的JS. 但是在有些手机上并不能成功执行,我的解决方案 ...

  4. flutter webview浏览器及与js交互、打开第三方app

    添加pubspec.yaml依赖 url_launcher: ^5.4.1 webview_flutter: ^0.3.18+1 --------------main.dart import 'pac ...

  5. Android—WebView与JS交互

    Html文件: WebView与JS交互方式: 1. 前提: WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSet ...

  6. Android开发-Android原生与WebView的js交互的实现

    前 言 一般在Android应用的开发过程中,一些核心的业务功能开发往往需要Android原生的开发,一些需要改动比较频繁的功能且不是核心的业务功能往往只需要在Android应用调用一个网页就行了.在 ...

  7. android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案

    我们在开发需求的时候,难免会接入一下第三方的H5页面,有些H5页面是具有上传照片的功能,Android 中的 WebView是不能直接打开文件选择弹框的 接下来我讲简单提供一下解决方案,先说一下思路 ...

  8. Android webview 加载的html 无法显示弹框

    WebSettings webSettings = webView.getSettings(); // 设置与Js交互的权限 webSettings.setJavaScriptEnabled(true ...

  9. android webview js交互,响应webview图片的响应事件

    2019独角兽企业重金招聘Python工程师标准>>> 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地址后,开启一个遮罩activit ...

最新文章

  1. html javascript 引号
  2. Highmaps网页图表教程之数据标签与标签文本
  3. 记录一个ansible高级用法与shell结合
  4. Hbase的shell出现wrong number of arguments xxx以及undefined method any?for xxxx
  5. 毕业半年,码过5个城市
  6. 阿里云盘内测_阿里云盘内测邀请码发放
  7. glassfish启动后不能进入部署页面_Spring Boot 热部署
  8. 阿里开源物联网操作系统 AliOS Things 3.0 发布,集成平头哥 AI 芯片架构!
  9. linux升windows10,Windows 10免费升级计划的利与弊
  10. 高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)
  11. sqlserver按'一二三四五'排序(hibernate对中文数字进行排序)
  12. python飞机大战源码素材包_Python飞机大战实战项目案例
  13. 计算机怎么求标准偏差,如何计算Excel标准偏差?您必须知道这两个技巧
  14. 爆锤数据结构(期末复习笔记)
  15. 支付宝网页端支付接口实现案例流程
  16. PDF文件转换文件格式
  17. 你好,WeDataSphere!
  18. python综合应用题 论语 230322
  19. GStreamer - On Windows
  20. 对于文字设置超出部分隐藏

热门文章

  1. 四均线交易系统(Four Set of MA Crossover System)
  2. Chrome 55 浏览器推出 Android 离线下载功能
  3. vs2008简体中文正式版下载
  4. 理解np.max、np.min、np.argmax、np.argmin以及np.sum中的axis参数
  5. 让理科生沉默,让文科生流泪的综合题详解
  6. 北京理工大学抢课教程
  7. 单片机中断系统(部分以AT89S52为例)
  8. 漫说从打工者到企业家的蜕变过程所碰到的问题及解决方案
  9. android如何获取RAM和ROM使用情况
  10. PostgreSQL是世界上最好的数据库