转:移动开发中一些bug及解决方案

网页开发要面对各种各样的浏览器,让人很头疼,而移动开发中,你不但要面对浏览器,还要面对各种版本的手机,iOS好一点,而安卓就五花八门了,你可能在开发中也被它们折磨过,或者正在被它们折磨,我在这里说几个我在开发中遇到的比较难缠问题,和解决方案,给其他朋友提个醒,因为一旦碰到了这些bug,虽然解决方法不难,但是你可能要花上几个小时,几天,甚至更长时间才能解决它们,遇到这些bug的话要注意,以后发现其他bug也会继续补充,也希望你也可以把你遇到的bug或者解决方案回复给我,我会一起补充到文章里,帮助其他人一起解决问题

bug一:

现象:

android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出现了两个

解决方案:

canvas外层的div需要设定属性style="overflow:visible;-webkit-transform: translateZ(0);

bug二:

现象:

Galaxy S4的webview中的canvas绘图有严重bug,无论是fillRect还是drawImage,会把0,0开始的1个像素,绘制到整个canvas,导致画面无法显示。注:此现象只出现在首次页面加载,当第二次进入页面后没有此问题。

解决方案:

galaxy s4的webview显示canvas的时候,有两个条件必须满足:
1,canvas外层的div需要设定属性style="overflow:visible;-webkit-transform: translateZ(0);"

2,页面上不得含有img标签

bug三:

现象:

android4.x中一部分手机,在改变canvas大小的时候有时会卡死。大家可能都知道,重新设定canvas的大小可以实现canvas的完全刷新,但是也会导致一部分4.x手机卡死。

解决方案:

用clearRect刷新canvas。

bug四:

现象:

WebView页面引入iScroll框架后,会导致一部分android4.x的click事件发生两次。这个其实是框架的bug,但是很多人在用,就在上周我还在群里碰到一个朋友问到了这个问题。

解决方案:

遇到的朋友不用问google或百度了,因为官方没有提供解决办法,所以目前只能弃用iScroll

备注:感谢网友[Meathill]提供信息,“可以设置click: false,不然iScroll会用代理的方式触发一次click”,遇到问题的朋友可以试一下。

bug五:

现象:

使用HTML5的canvas进行绘图,android4.0以上,有一大部分手机会经常出现clearRect无效的bug。

解决方案:

方案1:

[javascript] view plain copy

  1. canvas.width=canvas.width

来代替

[javascript] view plain copy

  1. canvas.clearRect().getContext("2d").clearRect()

但是,这样做的后果,就是另有一小部分(比如国内的三星NOTE2和S4等)会出现浏览器卡死的情况。

方案2:

就是用不透明背景,对于每侦重绘的游戏或应用来说,不透明背景就不会存在清屏的问题,当然这其实是选择了绕行,对于需要将canvas背景设置成透明的情况还是没有解决。

方案3:

[javascript] view plain copy

  1. canvas.clearRect(0, 0, w, h);
  2. canvas.style.visibility = ‘hidden’; // Force a change in DOM
  3. canvas.offsetHeight; // Cause a repaint to take play
  4. canvas.style.visibility = ‘inherit’; // Make visible again

这个会导致延时。

方案4:

[javascript] view plain copy

  1. canvas.clearRect(0, 0, w, h);
  2. canvas.style.display = ‘none’;// Detach from DOM
  3. canvas.offsetHeight; // Force the detach
  4. canvas.style.display = ‘inherit’; // Reattach to DOM

这个会产生锯齿,但是我认为是目前最好的方案了。

方案3和方案4由网友 Codezz 提供,解决方案的出处为。

https://medium.com/@dhashvir/Android-4-1-x-stock-browser-canvas-solution-ffcb939af758

bug六:

现象:

android手机,微信6.1,qq浏览器x5内核,这三个条件存在的前提下,在弹出输入框的时候,整个canvas画面会被压扁。希望微信以后升级能解决这个问题吧。

解决方案:

目前还没有找到完美的解决方案,如果有人知道,请一定告诉我。

感觉现在最好的办法就是将canvas页面和有输入框的页面分离开。

还有一种方法只能解决一部分手机的问题,就是在canvas的上一层的div中,设置style.width和style.height分别等于canvas的style.width和style.height,但是经过测试,这样只能解决一部分手机。

另外,下面是Android4.0中使用iframe时的限制或者是bug,

iframe中的bug我只遇到了一部分,然后稍微查了一下,发现原来还有很多,我就全列出来了

1,<a>标签中即使设定display:block,也会变成display:inline。
2,属性为position:fixed的元素无法点击。(另外Android的Chrome的话,如果iframe中有元素的position属性被指定为fixed或者absolute时将无法使用下拉条。)
3,document.body.scrollTop无法获取。
4,-webkit-tap-hightlight-color指定无效。
5,Anchor link无效
6,页面最下面的<a>超链接可点击,但是点击无效,页面不会跳转。
7,z-index重叠的元素,pointer-events指定无效。

--------------------

使用绝对定位的输入框,有时会无法输入东西,涉及IOS和Android所有版本的默认浏览器。 暂时没有完美的解决办法, 只有个很笨的办法,就是在onload里加上 input.value = " "; 这样改变输入框的值后,就可以正常输入了。

时间: 2025-01-01 03:26:28

转:移动开发中一些bug及解决方案的相关文章

Android实际开发中的bug总结与解决方法(一)

                                                                             Android实际开发中的bug总结与解决方法(一) Android开发中有很多bug,我们是完全可以在线下避免的,不要等到线上报的BUG的再去修复.下面是我在实际开发中遇到过的bug和解决方法. BUG 1: java.lang.RuntimeException: Unable to start activity ComponentInfo

信用评分卡模型开发中双峰分布原因及解决方案

信用评分卡模型开发中双峰分布原因及解决方案 文: 郑旻圻 邹钰 刘巧莉 转自:  数信互融 在信用评分卡模型开发过程中,正态性是检验模型信用评分分布是否有效的一个重要指标.正常情况下,标准的正态分布是单峰分布:但是在实际建模过程中,会遇到信用评分分布出现双峰的情况. 双峰分布出现时,数据规律一致性的假设被打破,我们需要从不同的角度考察其出现双峰分布的原因,对模型加以调整,使之准确地反映业务和数据中的规律,以便模型准确适用. 根据为数十家互联网金融企业建立评分卡模型的实践经验,我们总结了一些造成双

移动端微信公众号开发中问题记录及解决方案

1. 关于字体大小.图片大小.块元素大小的确定,目前一种方法,使用rem,rem的计算方式 document.documentElement.style.fontSize = document.documentElement.clientWidth / 10.8 + 'px'; 其中10.8是设计图的大小除以100,这样就可以直接用设计图中的大小除以100的值. px, em, 和rem的区别: a. px是相对于显示器屏幕分辨率而言的. b. em是相对于对象内文本的字体尺寸,如果当前行内文本

IOS 开发中遇到 duplicate symbol 解决方案

项目中需要引入第三方库,并且Xcode升级到了7.1,然后发现出现了近2000过个duplicate symbol的错误提示,仔细查看定位到两个.a文件,有很多的.o文件冲突了. 因为这两个是第三方的,自己没法修改,所以求助网络资料,得出下列两种解决方案. 方案一:修改other linker flag 在Build Settings->Other link flags中删除所有的-all_load与-force_load 方案一结果:没有解决我项目上的问题 据我所知,方案一可以解决部分dupl

Web开发中常见的兼容性解决方案(持续汇总...)

大纲 问题背景 HTML篇 CSS篇 Javascript篇 参考资料 问题背景 由于市场上浏览器种类众多,而不同厂商的浏览器其内核亦不尽相同,甚至同一厂商,不同版本之间的浏览器解析都有所不同.所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因. 我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容.同一个功能我们可能有很多不同的代码实现方式,我们尽可能的选择兼容性高的写法. HTML篇 CSS篇 Javascript篇 参考资料 结束语 每个程序员一生要学习1

如何通过热修复,搞定开发中的那些 Bug?

作为程序员,Bug 修复终究是绕不开的话题,本期移动开发精英俱乐部讨论的主题便是 Bug 修复中的 Hotfix,即热修复.接下来让我们跟随大牛的脚步来了解 Hotfix,就算你不能一下豁然开朗,相信也一定会有所启发.非常感谢赖春辉的整理,本文系国内 ITOM 管理平台 OneAPM 审校. 什么是热修复? 主持人-牛树民:我们自己的项目中还没有这方面的技术方案,最近一直在考虑这个.大家对热修复这个名词是怎么理解的?什么是热修复? 七里小晴天:是不是跟游戏打补丁差不多? longway:运行时,

移动Web开发的bug及解决方案

我目前移动Web开发遇到的bug以及解决方案(慢慢补充当中). 1.android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出现了两个. 解决方案: canvas外层的div需要设定属性style="overflow:visible;-webkit-transform: translateZ(0)";

iOS开发中遇到的一些问题及解决方案【转载】

iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Created by beyond on 15/6/6. //  Copyright (c) 2015年 beyond.com All rights reserved. //  不一定要用继承,可以使用分类 #import "MyScrollView.h" #import "CoView.

iOS开发中的数据安全隐患和解决方案

移动互联网的兴起,每天都会涌现大量的app产品,无论公司开发还是个人开发,大家都在追求更快的抢占市场,但是确忽略了打磨产品,也忽略了移动开发中的数据安全隐患,如果我们用Charles工具,很容易截获到很多知名的app的传输的隐私数据,包括用户名和账号信息等.比如下图是我用Charles(青花瓷)软件截获糗事百科明文方式传输的用户名和账号信息,网上了解到神州租车和一嗨租车的用户登陆也是明文传输,明文传输很容易被截获.下文我就将我今天查阅各种资料学到的关于iOS中数据安全的知识总结下来和大家分享.