WebView

作者: 桑享 | 来源:发表于2017-05-16 11:27 被阅读0次

    简单使用

    在AndroidManifest.xml设置访问网络权限:

    <uses-permission android:name="android.permission.INTERNET"/>

    private void init(){
            webView = (WebView) findViewById(R.id.webView);
            //WebView加载web资源
           webView.loadUrl("http://baidu.com");
           //加载asset中的html方便调试
           //mWebView.loadUrl("file:///android_asset/demo.html");
            //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
           webView.setWebViewClient(new WebViewClient(){
               @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                   //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                 view.loadUrl(url);
                return true;
            }
           });
        }
    

    js和webview的交互

    WebView 调用 JavaScript 方法

    webView.loadUrl("javascript:METHOD")
    

    JavaScript 调用 Java 方法

    mWebView.addJavascriptInterface(new JsBridge(),"xksJsBridge");

    final class JsBridge{
    
            /**
             * This is not called on the UI thread. Post a runnable to invoke
             * loadUrl on the UI thread.
             */
            @JavascriptInterface
            public void customerService(){
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        startActivity(new Intent(WebViewActivity.this, ProfileCustomerActivity.class));
    
                    }
                });
            }
    } 
    

    WebChromeClient方法

    作用:android可以拦截一些js的方法例如log和alter等方便调试

    /**
         * Provides a hook for calling "alert" from javascript. Useful for
         * debugging your javascript.
         */
        final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                Log.d(LOG_TAG, message);
                result.confirm();
                return true;
            }
    
            @Override
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                Log.e("webview", consoleMessage.message());
                return super.onConsoleMessage(consoleMessage);
            }
        }
    

    WebViewClient方法

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

    1,shouldOverrideUrlLoading

    返回true表示你已经处理此次请求。

    返回false表示有webview自行处理,一般都是把此url加载出来。

    比如有一个下面的需求:有一个web页面上一个链接,点击后我们不希望webview直接转到链接的页面,而是起一个我们自己写的activity,此时就需要让shouldOverrideUrlLoading返回true,如下:

    private WebViewClient webViewClient = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (match(url)) {
                    foo1();
                    return  true;
                }
                return false;
            }
        };
    

    另外post请求并不会回调这个函数,楼主可比较下shouldInterceptRequest

    2,

    webview缓存清理cookies

    总结

    1,只能加载带有http和https的url

    2,注意添加网络请求的权限

    3,js调用native方法接受的参数只能是String类型,而且方法内部最好写在runOnUIThread中
    且,注册的类别名在js中不为null,

    4,javascriptwebviewbride使用4.4版本以下的手机不能运行

    5,在调试webview的时候最好先clear project一下,不然会出现webview加载的内容不变

    6,只能获取webview中的title

    相关文章

      网友评论

          本文标题:WebView

          本文链接:https://www.haomeiwen.com/subject/ljxlxxtx.html