WebView与 JS 交互方式

https://blog.csdn.net/carson_ho/article/details/64904691/

 

例子,加上防止安全漏洞的设置

package com.eshore.smartsite.activitys.h5;

public class MyWebViewActivity extends Activity
{
    private final int SHOW_BUTTON=1000001;
    Button goToRtsp=null;
    private WebView myWebView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        Log.e("tan","onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview_main);

        myWebView = (WebView) findViewById(R.id.webView);
        WebSettings webSettings = myWebView.getSettings();
        //设置WebView属性,能够执行Javascript脚本
        webSettings.setJavaScriptEnabled(true);

        // 通过addJavascriptInterface()将Java对象映射到JS对象
        //参数1:Javascript对象名
        //参数2:Java对象名
        myWebView.addJavascriptInterface(new AndroidtoJs(), "android_lib");//AndroidtoJS类对象映射到js的test对象
        webSettings.setAllowFileAccess(false);
        webSettings.setAllowFileAccessFromFileURLs(false);
        webSettings.setAllowUniversalAccessFromFileURLs(false);
        //设置支持缩放
        webSettings.setBuiltInZoomControls(true);

        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
      
        final String url = "http://xxxxxxxxxxxx:xx00/index.html?come_from=android";
        myWebView.removeJavascriptInterface("searchBoxJavaBridge_");
        myWebView.removeJavascriptInterface("accessibility");
        myWebView.removeJavascriptInterface("accessibilityTraversal");

        myWebView.loadUrl(url);

        myWebView.setWebViewClient(new WebViewClient()
        {//  重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
            {
                super.onReceivedError(view, request, error);
                myHandler.postDelayed(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        Toast.makeText(MyWebViewActivity.this,"请求网络异常,重新连接...",Toast.LENGTH_SHORT).show();
                        myWebView.loadUrl(url);
                    }
                }, 3000);
                //view.loadUrl("about:blank");// 避免出现默认的错误界面
                //view.loadUrl(mErrorUrl);// 加载自定义错误页面
            }
        });

        goToRtsp=(Button)findViewById(R.id.goToRtsp);
        goToRtsp.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivity(new Intent(MyWebViewActivity.this, SiteListActivity.class));
                
            }
        });
    }

    private Handler myHandler =new Handler(new Handler.Callback(){
        @Override
        public boolean handleMessage(Message message) {
            switch (message.what){
                case SHOW_BUTTON:{
                    int num=(int)message.obj;
                    if(num==0){
                        goToRtsp.setVisibility(View.VISIBLE);
                    }else{
                        goToRtsp.setVisibility(View.GONE);
                        //goToRtsp.setVisibility(View.VISIBLE);
                    }
                    return true;
                }
            }
            return false;
        }
    });


    @Override
    public void onBackPressed()
    {
        //super.onBackPressed();
        if(myWebView != null && myWebView.canGoBack())
        {
            myWebView.goBack();
        }
        else
        {
            finish();
        }
    }

    public class AndroidtoJs  {
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void showButton(int num) {
            Log.e("tan","showButton num="+num);
            Message msg=new Message();
            msg.what=SHOW_BUTTON;
            msg.obj=num;
            myHandler.sendMessage(msg);
            //System.out.println("JS调用了Android的hello方法");
        }

        
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值