android webview 加载h5 相关问题

原创 2015年11月20日 10:49:24
                          **android webview 详解**
   最近使用webview 加载h5,进行开发。其中遇到诸多问题,一一介绍:
   1. webview 不会覆盖全屏,在屏幕下方会出现空白。解决方法: 网上给出方法,在manifest.xml中 加入
   <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:resizeable="true"
        android:anyDensity="true"/>
  以上语句的作用 是为我们的屏幕设置多分辨率支持。
  android:anyDensity = "" , 当值为 true 时,当应用程序安装在不同分辨率的手机上时,程序会分别加载 hdpi,mdpi,ldpi 文件夹中的资源。 相反,如果值设置为 false ,即使我们在 hdpi,mdpi,ldpi 文件夹下放有相同资源,应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高分辨率,以及低分辨率的手机上,比如说一部 240 × 320 像素的手机,如果设置 android:anyDensity = "false" , Android 系统会将 240 x 320( 低分辨率 ) 转换为   320 × 480( 中分辨率 ) ,这样的话,应用就会在低分辨率手机上加载 mdpi 文件中的资源。
    然后发现,并没有什么用,最后的解决方法是不要在线性布局或者相对布局中使用 webview ,可以采用framlayout 或者 绝对布局 都可。
 2. 有时候 需要从h5中跳回到客户端的页面,这有两种方法。第一种,拦截url,
   wev_web.setWebViewClient(new WebViewClient() {
                @Override     // cmbOA://go?url=gesture&username=xxx&usernum=xxx&moaurl=xxx&ss=xxx
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    LogUtils.defaultLog("url......" + url);
                    CookieManager cookieManager = CookieManager.getInstance();
                    String CookieStr = cookieManager.getCookie(url);
                    LogUtils.defaultLog("cookie...." + CookieStr);
                    if(url.contains("cmboa://go?url=settings")){         //cmbOA://go?url=settings
                        Intent intent2 = new Intent(LoginWebviewActivity.this,SettingActivity.class);
                        startActivity(intent2);
                    }
                    view.loadUrl(url);
                    return true;
                }
    webview加载h5 新页面时,每次都会执行 shouldOverrideUrlLoading()方法,所以只要在这里拦截url,和服务端协定跳转到某个协议,然后不加载页面,直接跳到本地的activity。
         第二种方法是 webview已经支持js,我也没使用这个方法,把简单demo介绍一下:
    myWebView = (WebView) findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
// 与js交互,JavaScriptinterface 是个接口,与js交互时用到的,这个接口实现了从网页跳到app中的activity 
// 方法,特别重要
myWebView.addJavascriptInterface(new JavaScriptinterface(this),
"android");
// html里的内容,test1就是本地的html,在项目assets文件夹下
String htmlText = getFromAssets("test1.html");
// 将html里的内容加载到webview中
myWebView.loadData(htmlText, "text/html", "utf-8");
myWebView.setWebViewClient(new myWebViewClient());

html 代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">   
function showAndroidToast() {       
android.showToast();   
}
</script>
</head>
<body>
<a href="#" id="a1" name="a1" onClick="showAndroidToast()">button</a>
<input type="button" value="Say hello"
onClick="showAndroidToast()"/> 
</body>
</html>
demo地址:http://download.csdn.net/detail/u012933335/9285237

3.cookie的问题。
  webview使用webkit的内核,如果需要保存cookie 需要执行以下方法:
     /**
     * 同步cookie
     * @param url
     */
   private  void syncCookie(String url){ //,String ss,String tokenId
       CookieSyncManager.createInstance(LoginWebviewActivity.this);
       CookieManager cookieManager = CookieManager.getInstance();
       String CookieStr = cookieManager.getCookie(url);
       LogUtils.defaultLog("1...cookie" + CookieStr);
       cookieManager.setCookie(url, CookieStr);
       CookieSyncManager.getInstance().sync();
   }
    以上方法 就可以同步webview 的cookie,但是有一个问题值得注意的是,不同的webview无法 同步cookie,也就是你新建一个webview 加载页面的话,cookie 是无法同步的,这是个比较头疼的问题,在本地和h5的跳转之间,始终只能用一个webview 加载,尤其是遇到自动登录的问题,需要设置许多逻辑,进行判断。网友如果有解决方法,可以在评论下告知我。

4  进度条
  wev_web.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    if (newProgress == 100) {
                        webProgressBar.setVisibility(View.GONE);
                    } else {
                        if (View.INVISIBLE == webProgressBar.getVisibility()) {
                            webProgressBar.setVisibility(View.VISIBLE);
                        }
                        webProgressBar.setProgress(newProgress);
                    }
                    super.onProgressChanged(view, newProgress);
                }
            });
  以上代码 可以加载进度条。

Android WebView页面中点击H5页面没有响应问题。

Android WebView页面中点击H5页面没有响应问题。 之前还一直以为是WebSettings设置不正确导致的,后面查了一下setWebChromeClient方法必须放在setWebVie...
  • qq229200
  • qq229200
  • 2017年05月19日 13:58
  • 2868

Android中使用WebView加载H5页面的方法

1、AndroidManifest.xml中必须加权限,否则会出Web page not available错误。 2、如果访问的页面中有Javascript,则webview必须设置支持J...
  • wpj1119245135
  • wpj1119245135
  • 2016年04月14日 15:03
  • 3221

webview 加载H5页面音乐不会自动播放问题解决方案

有公司在我们app上面投广告,发现他们的h5页面音乐不会自动播放。 经过几番折腾,确认以下方案可用。1.开启js支持 WebSettings setings = mWebView.getSettin...
  • u013597998
  • u013597998
  • 2016年11月30日 17:48
  • 2772

WebView加载闪屏问题

Android WebView加载过程闪屏问题 解决方法:在WebView中加入一下配置if(myWebView_bg_isBlack){ myWebView.setBackgroundColor(...
  • a15286856575
  • a15286856575
  • 2016年08月16日 09:05
  • 2191

Android Webview中解决H5的音视频不能自动播放、只有声音没有图像的问题

开发webview的时候,当加载有声音的H5的时候,声音不会自动播放,必须手动触摸一下屏幕,声音才会播放出来,虽然在H5文件中设置了autoplay属性,也调用了play方法,依然不能自动播放,最后通...
  • qq_25611187
  • qq_25611187
  • 2016年12月23日 16:02
  • 1946

android h5 js 混合开发解决webview加载白屏,不加载网页的问题(硬件加速网页渲染,优化体验)

android h5 js 混合开发解决webview加载白屏,不加载网页的问题(硬件加速网页渲染,优化体验)...
  • qq_29333911
  • qq_29333911
  • 2016年11月23日 14:58
  • 6356

Android原生webView加载h5页面出现加载错乱不完全问题

一、错误的效果图: 二、正确的效果图: 三、解决方案: webView.getSettings().setDomStorageEnabled(true);//打开DOM存储A...
  • yhy123456q
  • yhy123456q
  • 2017年08月30日 13:56
  • 765

android webview H5开发若干问题之问题三:android和js交互问题

安卓和js的交互,无非就是安卓的java调用js方法,js调用安卓本地java方法。 先来一遍大家都知道的规则。 安卓本地调用js:     js调用安卓方法。在这方面呢,我的理解是安卓本地用java...
  • xiaoyunchengzhu
  • xiaoyunchengzhu
  • 2016年06月03日 17:50
  • 2399

webView移动H5适配问题

ViewPort 移动开发前端得劲深入理解1.ViewPort是什么 一般来说,移动上的viewPort就是设备屏幕上能用来显示我们网页的那一块区域,但是,不局限于浏览器的可视区域的大小,可以比浏...
  • Pan12321
  • Pan12321
  • 2017年03月20日 19:02
  • 618

Android在使用WebView时,图片显示出错问题。

Android的webview在使用h5页面的时候,容易碰到h5页面中的图片加载异常的问题。一般情况下这种情况是由于android端和h5页面端使用的http链接头不一致导致的。 Android中使...
  • h1015038310
  • h1015038310
  • 2017年10月30日 17:06
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android webview 加载h5 相关问题
举报原因:
原因补充:

(最多只允许输入30个字)