接外包,有相关需求的可以联系我:Telegram | Email

WebView的addJavascriptInterface来调用Android方法

该文章创建(更新)于06/6/2020,请注意文章的时效性!

缘由

最近在学H5开发,想了解Android调用JS的请移步Android调用 Webview的JS方法

代码

html设置

在src/main/下创建一个文件夹assets,里面添加一个javascript.html文件,内容如下;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>emperinter</title>
    <script>
         function callAndroid(){
            // 由于对象映射,所以调用test对象等于调用Android映射的对象
            // 这里的test即为 mWebView.addJavascriptInterface(new AndroidtoJs(),"test");的传参
            // AndroidtoJS类对象映射到js的test对象
            // hello即位我们写的接口
            // 里面得参数即为我们要传递给Android得参数
            test.hello("JS里面的参数");
         }
      </script>
</head>
<body>
<!--点击按钮则调用callAndroid函数-->
<div align="center">
    <button class="font-size:32px;" type="button" id="button1" onclick="callAndroid()">调用安卓方法</button>
</div>

</body>
</html>

页面布局

java

  • 接口

我准备在这里面添加一个EditText来尝试直观感觉,结果不行。看来自己类等等的知识得抽空补补了!

//继承自Objiect类
public  class AndroidtoJs extends  Object{

    @JavascriptInterface
    public void hello(String msg) {
        //System.out.println("Js调用了Android的hello方法!");
        System.out.println(msg);
    }
}
  • MainActivity
public class MainActivity extends AppCompatActivity {
    WebView mWebView;


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

        mWebView = (WebView) findViewById(R.id.MainWebView);

        WebSettings webSettings = mWebView.getSettings();

        //设置Jscript交互的权限
        webSettings.setJavaScriptEnabled(true);

        // 通过addJavascriptInterface()将Java对象映射到JS对象
        // 参数1:Javascript对象名
        // 参数2:Java对象名

        mWebView.addJavascriptInterface(new AndroidtoJs(),"test");//AndroidtoJS类对象映射到js的test对象

        // 加载JS代码
        // 格式规定为:file:///android_asset/文件名.html
        mWebView.loadUrl("file:///android_asset/javascript.html");
    }

}

运行结果

参考


要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2020/06/06/addjavascriptinterface/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



微信公众号

优惠码

阿里云国际版20美元
Vultr10美元
搬瓦工 | Bandwagon应该有折扣吧?
域名 | namesiloemperinter(1美元)