Android WebView与JS交互全面详解(小结)

yizhihongxing

下面我来为你详细讲解“Android WebView与JS交互全面详解(小结)”的完整攻略。

了解Android WebView和JS交互的基本概念

在开始介绍Android WebView与JS交互的具体内容前,我们需要先了解一些基础概念:

  • WebView:Android中的一个内置控件,提供了一个用于显示web界面的View。WebView可以加载网页上的HTML、CSS、JavaScript脚本等内容。
  • JavaScript:一种脚本语言,最初被设计用于网页的交互和动态变化。JS可以通过在网页中内联代码或链接外部文件的方式被引入到网页中。
  • JS Bridge:指在WebView中,实现Java和JavaScript交互的桥梁。

Android WebView与JS交互的方法

实现Android WebView与JS交互的方法大致可分为以下四种:

  1. 通过WebView.loadUrl()方法实现

该方法适合于Java调用JS代码。Java代码可以通过WebView的loadUrl方法来向JS中注入JavaScript代码或者调用JS中的JavaScript函数。具体实现步骤如下:

  • 调用WebView的loadUrl()方法,将JS中的JavaScript代码或者JavaScript函数注入到WebView中,这样JS就可以访问该代码或函数。例如:
webView.loadUrl("javascript:document.getElementById('xxx').innerHTML='xxx'");
  • 在JS中编写JavaScript代码或给JavaScript函数取一个名字,调用Java中的方法,例如:
// JS代码
function jsFunction() {
  window.androidFunction.showMsg();
}

// Java代码
WebView webView = findViewById(R.id.webView);
webView.addJavascriptInterface(new JsInterface(),"androidFunction");

class JsInterface {
    @JavascriptInterface
    public void showMsg() {
        Toast.makeText(MainActivity.this, "JS调用了Java的方法", Toast.LENGTH_LONG).show();
    }
}
  1. 通过WebView.evaluateJavascript()方法实现

该方法适合于Java调用JS代码并获取返回值。Java代码可以通过WebView的evaluateJavascript()方法来调用JS中的JavaScript函数,并获取返回值。具体实现步骤如下:

  • 在JS中编写需要被Java调用的JavaScript代码或函数并给其取一个名字,例如:
// JS代码
function jsFunction(s) {
  return "返回值为:" + s;
}
  • 在Java中调用evaluateJavascript()方法并传入JavaScript函数名和需要传递的参数,此时可以设置一个回调函数,来获取JS函数返回值。例如:
webView.evaluateJavascript("jsFunction('参数值')", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Toast.makeText(MainActivity.this, value, Toast.LENGTH_LONG).show();
            }
        });
  1. 通过添加JS Interface实现

该方法适用于JS调用Java方法。Java代码可以使用addJavascriptInterface()方法将一个Java对象暴露给JS使用,此时JS可以通过该Java对象来调用Java方法。具体实现步骤如下:

  • 在Java中,创建一个对象并注解@JavascriptInterface,例如:
class JsInterface {
    @JavascriptInterface
    public void showToast(String msg) {
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
    }
}
  • 在WebView中添加JS Interface,例如:
webView.addJavascriptInterface(new JsInterface(), "android");
  • 在JS中使用JavaScript调用该Java对象的方法,例如:
<script type="text/javascript">
    function showToast() {
        window.android.showToast("Javascript调用了Java方法");
    }
</script>
  1. 通过 WebViewClient 的方法实现

该方法适用于捕获JS调用Java的方法。当JS需要调用Java中的方法时,WebView会调用一个shouldOverrideUrlLoading()方法,此时可以通过该方法捕获JS调用的URL并做出相应的处理。具体实现步骤如下:

  • 在JS中,调用某个特定的URL,并添加一些特定的参数,例如:
function JsToJava() {
   var url= "myApp://actionName?params1"+params1+"&params2="+params2;
   location.href=url;         
}
  • shouldOverrideUrlLoading()方法中,解析URL并调用Java方法,例如:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
   Uri uri=Uri.parse(url);
   if (uri.getScheme().equals("myApp")) {
      if (uri.getHost().equals("actionName")) {
          String params1 = uri.getQueryParameter("params1");
          String params2 = uri.getQueryParameter("params2");
          Toast.makeText(WebviewActivity.this, "JS调用了Java方法:" + params1, Toast.LENGTH_LONG).show();
      }
      return true;
   }
   return super.shouldOverrideUrlLoading(view, url);
}

示例说明

下面给出两个示例说明:

示例一

在JS中调用Java方法,并返回结果。具体实现步骤如下:

<!--在HTML中编写调用Java的JS代码-->
<button onclick="getAndroidVersion()">获取Android系统版本号</button>
<script type="text/javascript">
function getAndroidVersion() {
    var version = window.android.getAndroidVersion();
    alert(version);
}
</script>

// 在MainActivity中调用evaluateJavascript方法
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        //JS代码执行完成后,调用JS中的方法获取Android系统版本号
        webView.evaluateJavascript("javascript:getAndroidVersion()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                Toast.makeText(MainActivity.this, value, Toast.LENGTH_LONG).show();
            }
        });
    }
});
webView.loadUrl("file:///android_asset/index.html");

// 在JsInterface中添加getAndroidVersion方法
@JavascriptInterface
public String getAndroidVersion() {
    return Build.VERSION.RELEASE;
}

示例二

在Java中调用JS代码。具体实现步骤如下:

// 在MainActivity中调用loadUrl方法
webView.loadUrl("javascript:document.getElementById('xxx').innerHTML='Hello World!'");

// 在JS中编写需要被调用的函数
function jsFunction() {
    window.androidFunction.showMsg();
}

// 在JsInterface中添加showMsg方法
@JavascriptInterface
public void showMsg() {
    Toast.makeText(MainActivity.this, "JS调用了Java方法", Toast.LENGTH_LONG).show();
}

以上就是Android WebView与JS交互的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android WebView与JS交互全面详解(小结) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js实现数组的扁平化

    实现数组扁平化的方法有多种,以下介绍两种比较实用的方式。 方法一:使用递归实现数组扁平化 递归算法是一种自我调用的方法,即函数内部调用自身。使用递归实现数组扁平化的方式较为简单。 function flatten(arr) { var result = []; for (var i = 0, len = arr.length; i < len; i++…

    JavaScript 2023年5月27日
    00
  • 深浅拷贝

    // 注意: 基本数据类型不存在深浅拷贝,只是值传递,复合数据类型才有深浅拷贝之说         var obj1 = { name: “吴亦凡” };         var obj2 = obj1;         obj1.name = “罗志祥”;         // 相当于把obj1的指针复制了一份给了obj2,两个指针指向了堆内存中的一块内存…

    JavaScript 2023年4月18日
    00
  • 学习js所必须要知道的一些

    学习JavaScript所必须要知道的一些攻略 简介 学习JavaScript(以下简称JS)时,需要一些基础知识,其中包括语法、DOM操作、Ajax、闭包等等。下面将详细介绍学习JS的一些必备知识。 1. 语法 1.1 数据类型 JS包含7种不同的数据类型,分为原始类型和对象类型。原始类型包括: 数字(Number):整数或浮点数 字符串(String):…

    JavaScript 2023年5月28日
    00
  • Ajax注册用户时实现表单验证

    下面是“Ajax注册用户时实现表单验证”的完整攻略。 一、什么是Ajax表单验证 Ajax(Asynchronous JavaScript And XML)即异步 JavaScript 和 XML,通俗来讲就是在不刷新页面、不跳转到其他页面的情况下,通过 JavaScript 发送异步请求获取数据,再动态更新页面内容。 在用户注册页面中,为了提高用户体验,我…

    JavaScript 2023年6月10日
    00
  • JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析

    JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析 什么是函数式编程? 函数式编程(Functional Programming)是一种代码的组织方式,它强调将代码从数据处理过程中分离,提取出可复用的功能模块,以此提高程序的抽象能力、简洁性和可维护性。函数式编程的核心理念是将代码视…

    JavaScript 2023年5月27日
    00
  • JavaScript伪数组和数组的使用与区别

    下面我来详细讲解一下“JavaScript伪数组和数组的使用与区别”。 什么是JavaScript数组和伪数组? 在JavaScript中,数组是一种用于存储一组值的集合。数组可以存储不同类型的值,如字符串、数字、对象等等。在JavaScript中使用数组是非常普遍的,它能够更方便地管理和处理一组数据。 伪数组是一种类似于数组的对象,它拥有一些数组的特征,比…

    JavaScript 2023年5月27日
    00
  • JS实现可直接显示网页代码运行效果的HTML代码预览功能实例

    要实现可直接显示网页代码运行效果的HTML代码预览功能实例,可以使用JavaScript和HTML结合的方式来进行开发。主要的步骤分为以下几个部分: HTML布局:在HTML文件中,需要定义一个用于显示代码的div容器,以及一个用于输入代码的textarea元素。 <div id="code-container"></d…

    JavaScript 2023年5月28日
    00
  • 通过原生JS实现为元素添加事件的方法

    通过原生JS为元素添加事件可以使用 addEventListener() 方法。以下是实现为元素添加点击事件的步骤: 获取需要添加事件的元素 首先需要获取需要添加事件的元素,可以使用 document.getElementById() 方法获取元素的引用,也可以使用 document.querySelector() 方法获取元素的引用,具体使用哪一种方法取决…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部