android中webview与js的交互

最近做Android项目时需要进行webview与html页面中的js进行交互,包括android调用js以及js调用android本地代码,现将代码整理记录下。
整个布局比较简单,就是的一个TextView加一个WebView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context="com.example.demowebviewjs.MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="调用js方法"
        android:textSize="35sp" />

    <WebView
        android:id="@+id/wb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"></WebView>
</LinearLayout>

由于我们加载的网页是在本地的,所以不需要任何权限,进行完控件的初始化后就加载页面,并设置成支持js

WebView wb = (WebView) findViewById(R.id.wb);
//设置编码
wb.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
wb.getSettings().setJavaScriptEnabled(true);
//载入页面
wb.loadUrl("file:///android_asset/test.html");

android调用网页中的代码比较简单,只需要调用webview的loadUrl方法

wb.loadUrl("javascript:funFromjs()");

其中javascript是固定写法,冒号后面跟上页面中的方法名,如果方法中有参数的话只需要用单引号引用并且中间用逗号隔开,例如

wb.loadUrl("javascript:funFromjs('mUserName','mPsw')");

js调用安卓本地代码的话webview需要调用addJavascriptInterface这个方法

//设置本地调用对象及其接口
wb.addJavascriptInterface(new Object() {
    @JavascriptInterface //sdk17版本以上加上注解
    public void funFromAndroid(String name) {
        Toast.makeText(MainActivity.this, name,Toast.LENGTH_LONG).show();
        }

    public void fun(String name) {
         Toast.makeText(MainActivity.this, "调用fun2:" + name, Toast.LENGTH_SHORT).show();
        }
  }, "android");

可以看到其实就是两个参数,一个Object,一个String,其中Object中我们可以定义一些方法让js调用,不过需要注意的是如果SDK版本号高于17的话,如果希望js可以调用,那么需要在方法上加上@JavascriptInterface这个注解,后面的String就类似于对象名一样,最后加上js的代码

<!DOCTYPE html>
<html>
<head>
    <meta chatset="utf-8" />
    <title>This is a test</title>
</head>

<body>
    <a>js中调用本地方法</a>
    <script>

    function funFromjs(){
        document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";
    }
    var aTag = document.getElementsByTagName('a')[0];
    aTag.addEventListener('click', function(){
        //调用android本地方法
        android.funFromAndroid("调用android本地方法funFromAndroid(String name)!!");
        return false;
    }, false);
    </script>
    <p></p>
    <div id="helloweb"> 

    </div>
</body>
</html>

Demo下载

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值