您的位置:首页 > 理论基础 > 计算机网络

android5.0以上webview无法播放腾讯优酷等网络视频

2017-09-20 10:20 555 查看
最近一直在做浏览器项目,遇到某些手机在线无法播放腾讯视频,搞得我很郁闷,网上查了很多资料,大部分都说开了硬件加速就可以了,可是硬件加速早开了,也没用。继续找啊找啊,又看到说是http和https重定向问题,然后又试了下面的方法:
mWebView.setWebViewClient(newWebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if( url.startsWith("http:") || url.startsWith("https:") ) {
return false;
}
try{
Intent intent =new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity( intent );
}catch(Exception e){}
return  true;
}
1
2
3
4
5
6
7
8
9
10
11
12

还是没有用啊,再仔细看一下我的处理,已经包含了上面的处理,就算改了也没有用,纠结的很,然后再继续百度,还找了很久很久,忽然让我看到了一个评论,具体是说:又要新版本安全提升,需要添加下面的代码就行了…:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
getSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
1
2
3

惊喜的我赶紧去试了下,咦?居然有效哦。然后我就在纠结这是什么原因,然后在百度了一下,说这可能涉及到Android5.0 WebView中Http和Https混合的问题,下面分析一下前因后果。


原因:

从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。
知识储备:从Android5.0以后,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式: 

1. MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。 

2. MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。 

3. MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。
分析:在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。虽然官网给出的建议是,为了安全考虑,使用MIXED_CONTENT_NEVER_ALLOW模式,但是在实际引用中,当我们的服务器已经升级到Https,但是一些页面的资源是第三方的,我们不能要求第三方也都升级到Https,所以我们只能根据系统版本,用代码去设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW。


解决方法:

在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW,最好做一下版本判断。

原文链接:点击打开链接http://blog.csdn.net/qq_16472137/article/details/54346078
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: