WebView和js的互调

(创建于2017/5/20)

一个网页中有如下代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<script language="javascript">
    /* This function is invoked by the activity */
    function wave() {
        alert("Android调用Js啦");
    }
</script>
<body>
    <!-- Js调用Android代码 -->
    <a onClick="window.demo.onCallback()">点我!</a>
</body>

</html>

安卓代码如下

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);

        //在webView里面打开网页
        webView.setWebViewClient(new WebViewClient());

        //允许在webview里面弹出js的窗体
        webView.setWebChromeClient(new WebChromeClient());

        //允许js的执行
        webView.getSettings().setJavaScriptEnabled(true);

        //加载assets目录下的网页
        webView.loadUrl("file:///android_asset/demo.html");


        //把java里面的对象传递给js
        webView.addJavascriptInterface(new JsCallJava() {
            @JavascriptInterface
            @Override
            public void onCallback() {
                Toast.makeText(getApplicationContext(),"JavaScript调用的java代码",Toast.LENGTH_SHORT).show();
            }
        }, "demo");
    }

1.js 调用Java

我们知道,调用Java中一个方法,只需要获取到这个Java对象,然后对象.方法名的方式调用,在网页文件中,有这样一行

<a onClick="window.demo.onCallback()">点我!</a>

打开网页后点击点我两个字执行的就是一个onclick方法,window.demo表示的就是Java中的对象,onCallback()就是Java中被调用的方法,也就是点击“点我”后执行Java中的一个onCallback()方法,那么安卓中如何操作?
关键代码如下:

//把java里面的对象传递给js
        webView.addJavascriptInterface(new JsCallJava() {
            @JavascriptInterface
            @Override
            public void onCallback() {
                Toast.makeText(getApplicationContext(),"JavaScript调用的java代码",Toast.LENGTH_SHORT).show();
            }
        }, "demo"); 
         
    
        public interface JsCallJava{
              public void onCallback();
        }

设置一个接口,接口中的回调方法为js重调用的方法,很关键的一行@JavascriptInterface必须加上,指明这是一个js接口,否则无法执行

2.Java调用js

假如我们现在想调用网页中的wave方法

function wave() {
    alert("Android调用Js啦");
}

只需要这样执行

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

关键一点必须设置,不然无法弹出alert

//允许在webview里面弹出js的窗体
webView.setWebChromeClient(new WebChromeClient());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值