小工具知识网

当前位置: 首页 > 行业知识 > Android WebView详解和调用JS

行业知识

Android WebView详解和调用JS

2026-11-01 02:39:57 来源:互联网转载

@Override

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

if (newProgress == 100) {

mProgressBar.setVisibility(View.GONE);

} else {

mProgressBar.setVisibility(View.VISIBLE);

mProgressBar.setProgress(newProgress);

}

}

});

(2)如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。

/**

  • 在onKeyDown中设置webView在返回的时候

  • 自动记录浏览记录

  • @param keyCode

  • @param event

  • @return

    */

    @Override

    public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_BACK){

    if (mWebView.canGoBack()){

    mWebView.goBack();

    return true;

    }else {

    finish();

    }

    }

    return super.onKeyDown(keyCode, event);

    }

    (3)创建一个自己的WebViewClient,通过setWebViewClient关联

    //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开

    mWebView.setWebViewClient(new WebViewClient() {

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

    //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器

    view.loadUrl(url);

    return true;

    }

    /**

    • 1.网页页面开始加载的时候,执行的回调方法,可以实现加载等待界面

    • 2.在此方法中设置一个超时计时器

    • @param view

    • @param url

    • @param favicon

      */

      @Override

      public void onPageStarted(WebView view, String url, Bitmap favicon) {

      super.onPageStarted(view, url, favicon);

      mLinearLayout.setVisibility(View.GONE);

      mRelativeLayout.setVisibility(View.VISIBLE);

      }

      /**

      • 1.网页加载结束的时候,也要隐藏等待界面

      • 2.onPageFinished指页面加载完成,完成后取消计时器

      • @param view

      • @param url

        */

        @Override

        public void onPageFinished(WebView view, String url) {

        super.onPageFinished(view, url);

        mLinearLayout.setVisibility(View.VISIBLE);

        mRelativeLayout.setVisibility(View.GONE);

        }

        /**

        • 加载异常的界面

        • @param view

        • @param request

        • @param error

          */

          @Override

          public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {

          super.onReceivedError(view, request, error);

          Log.d(“testTimeout”, “-----------加载异常”);

          }

          });

          (4)访问的页面中有Javascript,则webview必须设置支持Javascript

          WebSettings mWebSettings = mWebView.getSettings();

          mWebSettings.setJavaScriptEnabled(true);

          (5)缓存的使用

          优先使用缓存

          mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

          不使用缓存

          mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

          特殊使用

          先给大家说说怎么获取这个html的标题title

          应用开发的时候使用WebView这个组件的过程中可能会接触到WebViewClient与WebChromeClient,那么这两个类到底有什么不同呢 ,WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:

          onLoadResource

          onPageStart

          onPageFinish

          onReceiveError

          onReceivedHttpAuthRequest

          WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等比如

          onCloseWindow(关闭WebView)

          onCreateWindow()

          onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)

          onJsPrompt

          onJsConfirm

          onProgressChanged

          onReceivedIcon

          onReceivedTitle

          我们在 WebChromeClient 中的 onReceivedTitle() 方法里判断html页面的标题中是否含有 “error”,如果有,则证明html加载失败,设置加载失败的标记,让在 WebViewClient 的完成是回 调的 onPageFinish() 方法里显示自定义的加载失败的页面。

          使用的是不要忘了添加网络权限:

          最后张贴一下全部代码:

          public class MainActivity extends AppCompatActivity {

          private WebView mWebView;

          private ProgressBar mProgressBar;

          private LinearLayout mLinearLayout;

          private RelativeLayout mRelativeLayout;

          @Override

          protected void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.activity_main);

          Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

          setSupportActionBar(toolbar);

          init();

          }

          private void init() {

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

          mProgressBar = (ProgressBar)findViewById(R.id.progressBar);

          mLinearLayout = (LinearLayout)findViewById(R.id.linearlayout);

          mRelativeLayout = (RelativeLayout)findViewById(R.id.relativwlayout);

          //WebView加载web资源

          mWebView.loadUrl(“https://www.baidu.com/”);

          /**

          • 对WebView设置监听器

            */

            WebSettings mWebSettings = mWebView.getSettings();

            mWebSettings.setJavaScriptEnabled(true);

            mWebView.setWebChromeClient(new WebChromeClient() {

            @Override

            public void onProgressChanged(WebView view, int newProgress) {

            super.onProgressChanged(view, newProgress);

            if (newProgress == 100) {

            mProgressBar.setVisibility(View.GONE);

            } else {

            mProgressBar.setVisibility(View.VISIBLE);

            mProgressBar.setProgress(newProgress);

            }

            }

            });

            //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开

            mWebView.setWebViewClient(new WebViewClient() {

            @Override

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

            //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器

            view.loadUrl(url);

            return true;

            }

            /**

            • 1.网页页面开始加载的时候,执行的回调方法,可以实现加载等待界面

            • 2.在此方法中设置一个超时计时器

            • @param view

            • @param url

            • @param favicon

              */

              @Override

              public void onPageStarted(WebView view, String url, Bitmap favicon) {

              super.onPageStarted(view, url, favicon);

              mLinearLayout.setVisibility(View.GONE);

              mRelativeLayout.setVisibility(View.VISIBLE);

              }

              /**

              • 1.网页加载结束的时候,也要隐藏等待界面

              • 2.onPageFinished指页面加载完成,完成后取消计时器

              • @param view

              • @param url

                */

                @Override

                public void onPageFinished(WebView view, String url) {

                super.onPageFinished(view, url);

                mLinearLayout.setVisibility(View.VISIBLE);

                mRelativeLayout.setVisibility(View.GONE);

                }

                /**

                • 加载异常的界面

                • @param view

                • @param request

                • @param error

                  */

                  @Override

                  public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {

                  super.onReceivedError(view, request, error);

                  Log.d(“testTimeout”, “-----------加载异常”);

                  }

                  });

                  //设置访问文件

                  mWebSettings.setAllowContentAccess(true);

                  mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

                  }

                  /**

                  • 在onKeyDown中设置webView在返回的时候

                  • 自动记录浏览记录

                  • @param keyCode

                  • @param event

                  • @return

                    */

                    @Override

                    public boolean onKeyDown(int keyCode, KeyEvent event) {

                    if (keyCode == KeyEvent.KEYCODE_BACK){

                    if (mWebView.canGoBack()){

                    mWebView.goBack();

                    return true;

                    }else {

                    finish();

                    }

                    }

                    return super.onKeyDown(keyCode, event);

                    }

                    }

                    WebView调用JS的使用方式

                    (1)首先写js文件 js_test.js

                    function alertFromJs(content){

                    alert(“From js:” + content);

                    }

                    简单的一个函数,功能就是弹出一个alert。

                    写html文件 index.html,在html里加载js文件,注意路径

                    JS Test

                    加载HTML网页成功!

                    将index.html和js_test.js放到JsTest文件夹里,将JsTest放入到安卓工程assets中。

                    写xml布局文件:

上一篇:联想服务器机箱盖怎么开?

下一篇:天启无尽幻境模具获取秘籍揭秘!