Android与JS交互

Java调用JS

  1. 新建html文件(注意位置 assets文件夹与res并列
    image
  2. 使用WebView调用js代码
    java调用本地html文件

    webView.loadUrl("file:///android_asset/HoHo.html");
    • html文件要与js文件同时放在assets文件夹下,其他文件调用不到js文件
  3. 使用WebView调用js代码

    webView.loadUrl("javascript:javaCallJs()");

    js代码:

    var times=1;
    var javaCallJs = function () {
        b = !b;
        document.getElementById('p').innerHTML = b ? 'java 调用' : 'java 再调用';
    }
    • java调用js,使用:webView.loadUrl(“javascript:

JS调用Java

  1. 为WebView加上设置
    java
    webView.addJavascriptInterface(JSActivity.this, "aramis");

    • 参数1:js的映射类。参数2:别名
  2. js调用的方法
    java
    @JavascriptInterface
    public void jsCallJava() {
    b = !b;
    content_java.setText(b ? "js 调用" : "js 再调用");
    }
  3. html调用
    html
    <button onclick="window.aramis.jsCallJava()">call Java</button>

    • οnclick= window+别名+java方法名

全部代码

java:JSActivity.class
public class JSActivity extends AppCompatActivity {
    private WebView webView;
    private TextView content_java;
    private boolean b;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_js);
        webView = (WebView) findViewById(webview);
        content_java = (TextView) findViewById(R.id.content_java);
        initWebView();
    }

    private void initWebView() {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("file:///android_asset/HoHo.html");

        if (Build.VERSION.SDK_INT >= 17) {
            webView.addJavascriptInterface(JSActivity.this, "aramis");
        }
    }

    @JavascriptInterface
    public void jsCallJava() {
        b = !b;
        content_java.setText(b ? "js 调用" : "js 再调用");
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.firstbutton:
                webView.loadUrl("javascript:javaCallJs()");
                break;
            case R.id.secondbutton:
                break;
        }
    }
}
activity布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/webview"
        android:background="#acc"
        android:orientation="vertical">

        <TextView
            android:id="@+id/content_java"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="this is java" />

        <Button
            android:id="@+id/firstbutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="first" />

        <Button
            android:id="@+id/secondbutton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="second" />

    </LinearLayout>
</RelativeLayout>
HoHo.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="application/javascript" src="HoHoJs.js"></script>
</head>
<body style="background-color: aqua">
<p onclick="hoho()">html content :
    <span id="p">this is p element</span></p>
<button onclick="hohoWithP('你猜')">button1</button>
<button id="button2" onclick="onButton2Click()">button2</button>

<script>
    var a=false;
    function onButton2Click() {
        a=!a;
        document.getElementById('p').innerHTML = a?'内部button2 click':'内部button2 又click';
    }
</script>
<div>
    <button onclick="window.aramis.jsCallJava()">call Java</button>
</div>
</body>
</html>
HoHoJs.js
var b = false;
var hoho=function () {
b=!b;
document.getElementById('p').innerHTML = b ? "我是大帅哥" : "我不是大帅哥";
//  alert('this is hoho');
};

var hohoWithP=function (str) {
   let c=str;
   b=!b;
   document.getElementById('p').innerHTML = b ? `${c}我是大帅哥` : `${c}我不是大帅哥`;
}

var times=1;
var javaCallJs = function () {
    b = !b;
    document.getElementById('p').innerHTML = b ? 'java 调用' : 'java 再调用';
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值