java调用JS 与JS 调java

本人博客地址:http://my.oschina.net/lijindou/blog

转载请标明原址:https://my.oschina.net/lijindou/blog/746993


这个 刚开始 我也不会,把我整的是个蛋疼的啊,

最后发现其实挺简单的,我现在给大家说的是我自己掌握的一种,

1. 先是要给项目配置一些权限

(1)、访问网络权限

<uses-permission android:name="android.permission.INTERNET" />

(2)、访问SD卡权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

2.给webview 配置

webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setJavaScriptEnabled(true);

3.这个就是webview想JS 暴露一个 可以调用的对象(用来JS调用JAVA方法和JAVA调用JS又返回值的方法时用,如果非上面的两种情况时,则可以忽略此步。)

webView.addJavascriptInterface(new JsToJava(), "android");  //JsToJava是内部类,代码在后面。android 是接口名字。

上面的是准备工作

下面的就是要调用的代码了


java调用JS 方法(无返回值)

webView.loadUrl("javascript:getStsmA()");//调用 JS  中的方法

没错,你没有看错,就是这么简单,在加载完HTML页面后,执行这段代码,就可以调用JS 中的方法了

JS调用java

webView.addJavascriptInterface(new JsToJava(), "android");  //JsToJava是内部类,代码在后面。android 是接口名字。
webView.loadUrl("javascript:getStsmA()");//调用JS中的方法
private class JsToJava {
    @JavascriptInterface
    public void getStsm(String paramFromJS) {//java暴露的方法,用于 JS 调用

        Log.e(TAG, "js返回结果===" + paramFromJS);//处理返回的结果
    }
}

我在贴出来JS 代码

大家要注意了最后一段代码 

window.android.getStsm(rtn) ;

 这段代码的意思是JS调用JAVA中的方法

android:java中想JS 中暴露的对象名

getStsm:用Java中暴露的对象名。方法名(就是调用java中的getStsm()这个方法)


这样JS 就可以通过java这边暴露的对象名和方法名调用

大家要输还是不理解的话,就看看 这张图吧!!!


好了 给大家上代码 吧

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Button;


public class MainActivity extends AppCompatActivity {
    private WebView webView;
    private static final String TAG = "MainActivity";
    private Button but;

    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) this.findViewById(R.id.webView_viewTable);
        but = (Button) this.findViewById(R.id.but);
        /**
         *在Android中要 用java调用 JS  很简单 直接
         *webView.loadUrl("javascript:getfsA()");//调用 JS  中的方法
         *这个就是调用无返回值的  方式,直接一句话   (当然 对webview 还有一些 配置,在这里 先 不说了)
         * 传参数给webview 的话 ,就是在
         * webView.loadUrl("javascript:getfsA('参数')");//调用 JS  中的方法
         * 就是上面的方法
         * 这样 我们的  java 调用 JS 的无返回值 方法 ,就完了
         *
         * 要调用又返回值的话,我们这边不是接收者,而是我们调用JS 中的方法,
         * 让此方法调用 本地的 一个java方法,然后 传值过来,这样  我们就接收到值了
         * */
        //这几行代码是对webview的授权,不能少
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new JsToJava(), "android");  //JsToJava是内部类,代码在后面。android 是接口名字。
/**        这里的 第二个参数  就是 JS 回调 java的 一个方法名大家注意看下html文件中 调用的方法的返回
 window.android.getfs(rtn);//JS 中 的代码,这句代码的意思是,通过android这个java暴露的借口,调用getfs()这个方法
 *
 **/
        webView.loadUrl("file:///storage/emulated/0/1.html");//这句是载入一个html页面。
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.loadUrl("javascript:getfsA()");//调用 JS  中的方法
            }
        });
    }

    private class JsToJava {
        @JavascriptInterface
        public void getfs(String paramFromJS) {//Android暴露的方法,用于 JS 调用
            //这个方法就是JS 调用java方法 ,传回 返回值,这样我们就接收到JS 返回给我们的值了
            Log.e(TAG, "js返回结果===" + paramFromJS);//处理返回的结果
        }
    }
}


下面的是html 代码

function  getStsmA() { 
    var rtn =  getStsm();
    window.android.getStsm(rtn) ; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值