美文网首页
2018-01-15,webview的坑

2018-01-15,webview的坑

作者: 欧阳峰_oyf | 来源:发表于2018-01-15 16:04 被阅读0次

    1.为什么Webview打开一个页面,播放一段音乐,退出Activity时音乐还在后台播放?

    //销毁Webview,解决

    @Override

    protectedvoidonDestroy(){

       if (mWebview != null) {

           mWebview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);

           mWebview.clearHistory();

           ((ViewGroup) mWebview.getParent()).removeView(mWebview);

           mWebview.destroy();

           mWebview = null;

       }

       super.onDestroy();

    }

    2.为什么打包之后JS调用失败(或者WebView与JavaScript相互调用时,如果是debug没有配置混淆时,调用时没问题的,但是当设置混淆后发现无法正常调用了)? 

    -keepattributes *Annotation*  

    -keepattributes *JavascriptInterface*

    -keep public classorg.mq.study.webview.DemoJavaScriptInterface{

      public ;

    }

    #假如是内部类,混淆如下:

    -keepattributes *JavascriptInterface*

    -keep public classorg.mq.study.webview.webview.DemoJavaScriptInterface$InnerClass{

       public ;

    }

    3. 5.0 以后的WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来,怎么解决?

    原因是Android 5.0上Webview默认不允许加载Http与Https混合内容:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    //两者都可以

    webSetting.setMixedContentMode(webSetting.getMixedContentMode());

    //mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

    }

     参数说明:

    MIXED_CONTENT_ALWAYS_ALLOW 允许从任何来源加载内容,即使起源是不安全的;

    MIXED_CONTENT_NEVER_ALLOW 不允许Https加载Http的内容,即不允许从安全的起源去加载一个不安全的资源;

    MIXED_CONTENT_COMPLTIBILITY_MODE 当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格;

    4. WebView调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片。怎么解决?

    因为Google攻城狮们对setWebChromeClient的回调方法openFileChooser做了多次修改,5.0以下openFileChooser有几种重载方法,在5.0以上将回调方法该为了onShowFileChooser。

    http://blog.csdn.net/xiexie758/article/details/52446937

    5.WebView 开启硬件加速导致的问题?

    WebView开启硬件加速导致屏幕花屏问题的解决:

    原因分析:

    4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。

     6.ViewPager里非首屏WebView点击事件不响应是什么原因?

    如果你的多个WebView是放在ViewPager里一个个加载出来的,那么就会遇到这样的问题。ViewPager首屏WebView的创建是在前台,点击时没有问题;而其他非首屏的WebView是在后台创建,滑动到它后点击页面会出现如下错误日志:

    20955-20968/xx.xxx.xxx E/webcoreglue﹕ Shouldnothappen:norect-based-test nodes found

    解决方案:

    这个问题的办法是继承WebView类,在子类覆盖onTouchEvent方法,填入如下代码:

    @Override

    publicbooleanonTouchEvent(MotionEvent ev){

    if(ev.getAction() == MotionEvent.ACTION_DOWN) {

    onScrollChanged(getScrollX(), getScrollY(), getScrollX(), getScrollY());

    }

    returnsuper.onTouchEvent(ev);

    }

    关于WebView的一点小优化

    加快HTML网页加载完成的速度,等页面finish再加载图片

    自定义WebView页面加载出错界面

     怎么知道WebView是否存在滚动条?

    怎么知道WebView是否已经滚动到页面底端?

    相关文章

      网友评论

          本文标题:2018-01-15,webview的坑

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