ionic 使用了 crosswalkwebview 所产生的bug 及 解决方案
一、问题产生:
在ionic app 优化方案中,我在前之前的博文中提到使用 --crosswalkwebview;
使用了crosswalkwebview后,app的显示及兼容效果确实很不错,虽然app大小多了20m左右,但是,当时想着,没所谓了,只要体验提升了即可;
但是在之后,我突然发现了一个bug:
“当ionic的键盘弹出的瞬间,整个视图会出现迷之闪动,貌似那一瞬间,整个视图被压缩得剩下一半了”
这个bug特别是在有背景图片的视图的情况下,显得特别的恶心,也就是整个背景图片在那一瞬间被无情的压缩,显得特别难看;
在网上各种搜索,并不能找到相应的解决方案,浑身难受~~~
二、思考:
后来自己在研究这个bug原因的时候,发现了,当app处于全屏的时候,这个bug就不复存在了;
这个发现让我突然想到了状态栏,statusBar,肯定和它有关系;
于是,我把状态栏设置为:
StatusBar.overlaysWebView(true),也就是悬浮状态;
在打包尝试的时候,确实,这个bug没有出现,因此这里,我想到了个解决方案,就是将状态栏设置成悬浮,然后,header 和 ion-content 都给个margin-top ,值为状态栏的高度;
三、解决
1、确定装了2个cordova插件
cordova plugin add cordova-plugin-statusbar cordova plugin add ionic-plugin-keyboard
2、在入口页面 index.html ,为ion-nav-view 添加 id="adjustHeightAfterKeyboard"

3、在app.js里面添加一下代码
if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
//动态计算最外层 ion-nav-view 的高度,使键盘弹出时不会挡住内容
window.addEventListener('native.keyboardshow', keyboardShowHandler);
window.addEventListener('native.keyboardhide', keyboardHideHandler);
var viewDom = document.getElementById('adjustHeightAfterKeyboard')
function keyboardShowHandler(e){
var viewHight = document.body.clientHeight - e.keyboardHeight;
viewDom.style.height = viewHight + 'px';
}
function keyboardHideHandler(e){
viewDom.style.height = document.body.clientHeight + 'px';
}
}
if (window.StatusBar) {
//将手机状态栏设置成悬浮
StatusBar.overlaysWebView(true);
StatusBar.backgroundColorByHexString("#2e2b36");
}
4、给header-bar 和ion-content 加上上边距
.bar-header{
box-shadow: 0 1px 1px 0 #eee;
margin-top:23px;
}
.scroll-content{
margin-top:23px;
}
ok,到此,假装以为可以了,运行了下,好像确实可以,但是,又出现了一个bug,心好累!!
app 在splashscreen 消失,进入首页的时候,状态栏并不悬浮,导致了明显的空白上边距,而其他页面都不会,且从其他页面再切回来首页的时候,bug就消失了。
因此,我只能又加了个判断,在首页的controller.js写上以下代码
//修复首次进来头部有margin 的bug;(判断历史的view个数并且判断其他视图是否被点击缓存着)
var childViews = Object.keys($ionicHistory.viewHistory().views).length; //视图里面历史view个数
var sblingsViews = $('.tab-content').length; //tab视图的个数
if(childViews == 1 && sblingsViews == 1){
$scope.isFirstTimeHome = true;
}else{
setTimeout(function(){
$scope.isFirstTimeHome = false;
},300)
}
根据 $scope.isFirstTimeHome 来控制是否让margin-top 为0,也即是说如果是首次进来$scope.isFirstTimeHome =true,让margin-top为0,就解决了该bug

ok,到此为止,算是解决了;
但是我想着,是否有更好的方法能解决啊,好烦,ionic的bug真心难解决,重点是搜索不到和我这个问题类似的解决方案,一个都没有,目前只能这样解决;
如果有更好的建议的朋友希望能给我回复下,感谢!
ionic 使用了 crosswalkwebview 所产生的bug 及 解决方案的更多相关文章
- 移动Web开发的bug及解决方案
我目前移动Web开发遇到的bug以及解决方案(慢慢补充当中). 1.android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出 ...
- MySQL中char(36)被认为是GUID导致的BUG及解决方案
MySQL中char(36)被认为是GUID导致的BUG及解决方案 有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划 ...
- [转]rpcndr.h和wtypes.h冲突Bug的解决方案
[转]rpcndr.h和wtypes.h冲突Bug的解决方案 http://blog.csdn.net/tzwh_86/article/details/9495133 rpcndr.h和wtypes. ...
- 转:移动开发中一些bug及解决方案
网页开发要面对各种各样的浏览器,让人很头疼,而移动开发中,你不但要面对浏览器,还要面对各种版本的手机,iOS好一点,而安卓就五花八门了,你可能在开发中也被它们折磨过,或者正在被它们折磨,我在这里说几个 ...
- pycharm下: conda installation is not found ----一个公开的bug的解决方案
pycharm conda installation is not found ----一个公开的bug的解决方案 pycharm+anaconda 是当前的主流的搭建方案,但是常出现上述问题. ...
- ionic 中$ionicView.beforeEnter 事件的一个bug
我在使用ionic写app的时候,需要使用$IonicView.beforeEnter事件,在页面进入前做一些事情,但是发现,它不起作用,很蛋疼,后来,看了别人做的app例子,也涉及到这个$Ionic ...
- IOS9.0中hash值的bug与解决方案
事件起因 事情是这样的:产品上线发布,突然出现了问题.运营Gg过来反应,当场给露珠演示,运营同事的手机是iphone,bug确实是存在的.奇怪的是露珠用了其他iphone手机(借别人的,露珠的是吊死安 ...
- 线上bug的解决方案--带来的全新架构设计
缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... ...
- 常见bug及解决方案
1.外边距叠加 一.发生在一个div内 <!DOCTYPE> <html> <head> <meta http-equiv=Content-Type cont ...
随机推荐
- Mysql,zip格式安装、修改密码、建库
Mysql,zip格式 1. Mysql 主目录最好别带有"- ."之类的字符 2. Mysql 配置环境变量 Path 环境变量后加上 mysql解压路径:eg:E:\mysql ...
- Struts2拦截器登录验证
Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截 ...
- Unity 消息发送机制 解析
该博客,只为解析,解析,解析,已经整理好,已经整理好,已经整理好.代码核心原理套用网上最流行的那一套,也是最常用游戏开发适用的消息机制.这里面加上自己的一些优化,极大的修正(哈哈),实测,没问题.万一 ...
- 源码浅谈(一):java中的 toString()方法
前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> ...
- 关于java和c++中的i++
看到一个题目,大概是i=i++之类. 乍一看很简单,都知道i++的先参与计算再自增, 所以i不变. 但是仔细一想, 如果i不变, 那么在赋值之后, 自增的i, 增加的是谁呢? 逻辑顺序是怎样的呢? / ...
- JAVA虚拟机系列文章
本系列文章主要记录自己在学习<深入理解Java虚拟机-JVM高级特性与最佳实践>的知识点总结,文章内容都是基于周志明所著书籍的总结. 1.Java内存区域与溢出 2.垃圾收集器与内存分配策 ...
- 基于Kubernetes的WAF集群介绍
Kubernetes是Google开源的容器集群管理系统.它构建Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,可看作是基于容器技术的PaaS平台. 本文旨 ...
- php中for循环的应用1
for 循环是 PHP 中最复杂的循环结构.它的行为和 C 语言的相似.在PHP中使用的是执行相同的代码集的次数. for 循环的语法是: for (expr1; expr2; expr3)state ...
- Java项目和maven项目中如何获取&设置配置文件中的属性
通常情况下,我们会在一些配置文件文件中配置一些属性.如: indexPath = E\:\\Tomcat_7.0\\webapps\\ipost_stage\\lucene\\index imgUpl ...
- 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)
一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...