js与android交互

 

直接上代码:

MainActivity中代码

public class MainActivity extends AppCompatActivity {
            @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            initView();
        }

        private void initView() {
            final WebView webView = (WebView) findViewById(R.id.web1);
            webView.loadUrl("http://192.168.1.108:8081/");

            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webView.addJavascriptInterface(new JiaoHu(),"hello");

            Button btn = (Button) findViewById(R.id.click);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    webView.loadUrl("javascript:android(true)");
                }
            });
        }

        public class JiaoHu{
            @JavascriptInterface
            public void showAndroid(){
                Toast.makeText(MainActivity.this,"js调用了android的方法",Toast.LENGTH_SHORT).show();
            }
        }
    }

activity_main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/click"
    android:text="点我"
    android:layout_marginTop="50dp"/>
    <WebView
        android:id="@+id/web1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="89dp">
    </WebView>



</android.support.constraint.ConstraintLayout>

html中的代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<div>
    <p id="ap">快递顺丰快递是</p>
    <button onclick="window.hello.showAndroid()">的说法是</button>

    <button onclick="self()" id="btn">大师傅但是</button>
</div>

<script type="text/javascript">
    function android(bl){
        if(bl){

            document.getElementById("ap").innerHTML= "大师傅似的"
        }else{
            document.getElementById("ap").innerHTML= "的身份"
        }
    }
    function self(){
        document.getElementById("btn").innerHTML= "dsfdss"
    }

</script>
</body>
</html>

 

 

webview.addJavascriptInterface(mSnMap, "android");

添加了一个java和js交互的接口,android字符串相当于一个Brige桥梁的作用,安卓4.2以后增加了@JavascriptInterface接口,

只有代码@JavascriptInterface注解的方法js才能调用,之前是被注入的类和从父类继承的所有的public的方法都能访问,这也是进一步保证APP的安全性.

 

 

setWebChromeClient比setWebViewClient功能强大一些,

  1. setWebClient帮助WebView处理各种通知、请求事件

    onLoadResource
    onPageStart
    onPageFinish
    onReceiveError
    onReceivedHttpAuthRequest

如果你不需要太多的功能而仅仅是渲染一个HTML网页,只需要用setWebViewClient就可以了,但是如果要处理比较复杂的事务,就考虑用后者

2.setWebChromeClient辅助WebView处理JavaScript的对话框,网站图标,网站title,加载进度等

onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle

WebView基于webkit引擎展现web页面的控件,使用前需要在Android Manifest file中配置internet访问权限,否则提示页面无法访问。
WebViewClient会在一些影响内容喧嚷的动作发生时被调用,比如表单的错误提交需要重新提交、页面开始加载及加载完成、资源加载中、接收到http认证需要处理、页面键盘响应、页面中的url打开处理等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值