最简单的 Android webview与js互调

在开发的时候遇到了这个问题,现在记录一下。只涉及到了最基本的使用,没有更深一步的细究。

以下方法加载本地 html或者联网的 html都适用。


一 .android 调用 js

Java部分

@SuppressLint("SetJavaScriptEnabled")
    private void test(WebView webView, String url) {

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

        //加载本地HTML
        //webView.loadUrl("file:///android_asset/JsToAndroid.html");

        //加载网络HTML
        webView.loadUrl(url);
        
        //调用js方法
        webView.loadUrl("javascript:callJS()");
    }

(1)加载的页面如果是项目本地的 html的话,格式固定为file:///android_asset/文件名.html

(2)调用 js 方法的时候,“javascript:callJS()”前面 javascript 是固定的写法,callJS()是要调用的 js 的方法名字,要和  js 中的方法保持一致。


js部分

<!-- 安卓调用js -->
    <script>
    
         function callJS(参数){
            
            console.log(参数);
          
         }
    
    </script>

注意:如果所调用的 js 的方法是需要传入参数的,上面 调用 js 的方法就写成 

扫描二维码关注公众号,回复: 2108218 查看本文章
webView.loadUrl("javascript:callJS(" + 参数+ ")");
 
 

二 . js 调用Android

Java部分

先写一个与 js 对象映射关系的Android类

class JsObject {
        @JavascriptInterface
        public void loginOut() {

            Intent intent = new Intent(WebActivity.this, LoginActivity.class);
            startActivity(intent);

        }
    }

示例代码是跳转了一个页面,就是点击 html页面中的退出登录按钮,跳转到 LoginActivity 页面

调用

private void callJava(WebView webView, String url) {

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

        webView.addJavascriptInterface(new JsObject(), "call");

        //加载本地HTML
        //webView.loadUrl("file:///android_asset/JsToAndroid.html");

        //加载网络HTML
        webView.loadUrl(url);

    }


js 部分

<!-- js调用安卓 -->
    <script>
        function callAndroid() {
                
            <!--由于对象映射,所以调用test对象等于调用Android映射的对象-->
            call.logOut();
        }
      
    
    </script>

(1)Java映射类 JsObject 的 logout() 方法前要加注解 @JavascriptInterface

(2)call相当于一个映射的对象,Java 端的对象为 call 的话,js 端调用的对象也必须为 call

(3)JsObject 类中的定义的方法 logout()要和 js 中的方法名称保持一致

注意:如果 js 需要向 Java 传递参数的话,js 部分代码为

call.logout("123") 

Java部分代码( 在 JsObject 类中的logout()方法中接收)

public void logout(String para){

log.e ( TAG , para );

}

以上,本人才疏学浅,目前只能有这个程度。其实使用起来还是很简单的。



猜你喜欢

转载自blog.csdn.net/qq_39761063/article/details/80940014
今日推荐