zoukankan      html  css  js  c++  java
  • Android原生控件 -- WebView

    ⒈用途

      加载网页

      • 加载URL(网络或者本地assets文件夹【这个文件夹下存放着我们不需要编译的资源文件,例如html等不需要编译成二进制代码】下的html文件)
      • 加载html代码
      • Native和JavaScript相互调用(混合调用)

    ⒉使用

      加载网络URL

      • webview.loadUrl("https://www.coreqi.cn");

      **默认WebView不支持js(JavaScript),需要开启支持

      • webview.getSettings().setJavaScriptEnabled(boolean flag);

      加载assets文件夹下的html文件

      • webview.loadUrl("file:///android_asset/test.html");

      加载html代码

      • webview.loadData();      //这个方法有时会出现例如乱码等情况
      • webview.loadDataWithBaseURL();  //这个方法通常在编码设置方面相较好一些

      网页的前进后退

      • webview.canGoBack()     //当前页面是否能够后退
      • webview.goBack()       //返回当前页面的上一个页面 (后退)
      • webview.canGoForward()    //当前页面是否能够前进
      • webview.goForward()    //返回当前页面的下一个页面(前进)
      • webview.canGoBackOrForward(int steps)  //是否能够返回或者前进
      • webview.goBackOrForward(int steps)      //前进或者后退几步

      按下返回键,默认是退出当前Activity,如果希望是在WebView控件内后退,需要重写Activity的onKeyDown方法

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
                webView.goBack();
                return true;  //返回true表示当前事件已被处理,返回false则当前事件还将会继续传递
            }
            return super.onKeyDown(keyCode, event);
        }

      当然,也可以这样写

        @Override
        public void onBackPressed() {
            if(webView.canGoBack()){
                webView.goBack();
            }
            super.onBackPressed();
        }

      WebView的跳转默认不是在WebView中继续加载的,而是调用手机浏览器去打开连接。我们可以继承WebViewClient去自定义

    public class MyWebViewClient extends WebViewClient{
    
        /**
         * 当页面跳转,就会调用该方法
         * @param view
         * @param request
         * @return
         */
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            //我们不希望调用本地浏览器去打开连接,我们希望能够在当前WebView中继续加载
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    
        /**
         * 页面加载时执行
         * @param view
         * @param url
         * @param favicon
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
    
        /**
         * 页面加载完成后执行
         * @param view
         * @param url
         */
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }
    }
            webView.setWebViewClient(new MyWebViewClient());

      ***

    public class MyWebChromeClient extends WebChromeClient{
    
        /**
         * 获取网页加载进度,可以实现进度条功能
         * @param view
         * @param newProgress
         */
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
        }
    
        /**
         * 设置网页的Title
         * @param view
         * @param title
         */
        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            setTitle(title);
        }
    }

      WebView执行js(JavaScript)

    webView.loadUrl("javascript:alert('hello')");
    webView.evaluateJavascript("javascript:alert('hello')",null);

      js(JavaScript)调用WebView方法

    webView.addJavascriptInterface();
  • 相关阅读:
    Oracle OMF 创建数据库
    Oracle 数据库修改数据文件
    oracle 12c 安装文档
    mysql5.7 多次增量备份及恢复测试
    Mysql 数据库模拟误操作基于binlog恢复
    基于scn号恢复oracle数据库测试
    读源码 | metisMenu侧边栏插件
    JavaScript | JQuery插件定义方法
    JavaScript | 模拟文件拖选框样式 v1.0
    JavaScript | JSON基本格式
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/12159725.html
Copyright © 2011-2022 走看看