1. 程式人生 > >淺析web移動開發常見的bug

淺析web移動開發常見的bug

隨著只能手機的普及,web開發也越來越受開發者的關注,下面是網路整理的一些常見web開發的bug,歡迎補充:

問題一:android4.0以上一部分手機的webview中,當canvas小於螢幕大小時,繪圖時會出現重影,就是說一個圖只繪製了一遍,卻出現了兩個

解決方案:

canvas外層的div需要設定屬性style="overflow:visible;-webkit-transform: translateZ(0);

問題二:使用HTML5的canvas進行繪圖,android4.0以上,有一大部分手機會經常出現clearRect無效的bug。

解決方案:

方案1:

[java] view plain copy

在CODE上檢視程式碼片派生到我的程式碼片

canvas.width=canvas.width

來代替

[java] view plain copy

在CODE上檢視程式碼片派生到我的程式碼片

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

但是,這樣做的後果,就是另有一小部分(比如國內的三星NOTE2和S4等)會出現瀏覽器卡死的情況。

方案2:

就是用不透明背景,對於每偵重繪的遊戲或應用來說,不透明背景就不會存在清屏的問題,當然這其實是選擇了繞行,對於需要將canvas背景設定成透明的情況還是沒有解決。

方案3:

[java] view plain copy

在CODE上檢視程式碼片派生到我的程式碼片

canvas.clearRect(0, 0, w, h);

canvas.style.visibility = ‘hidden’; // Force a change in DOM

canvas.offsetHeight; // Cause a repaint to take play

canvas.style.visibility = ‘inherit’; // Make visible again

這個會導致延時。

方案4:

[java] view plain copy

在CODE上檢視程式碼片派生到我的程式碼片

canvas.clearRect(0, 0, w, h);

canvas.style.display = ‘none’;// Detach from DOM

canvas.offsetHeight; // Force the detach

canvas.style.display = ‘inherit’; // Reattach to DOM

問題三:應用css3 translate3d平移效果後的標籤元素,在ios上的safari以及app的webview中會出現頁面載入完成後其子元素閃動現象,具體如下:

<ul style=”-webkit-transform: translate3d(0, 0, 0); -webkit-transition: 0ms; “>

<li><img src=”http://pic2.58.com/m58/m3/img/imglogo_gray.png” ref=”http://1.pic.58control.cn/p1/big/n_22998799743506.jpg”></li>

</ul>

解決方法(兩種):

1、可在其子元素中統一新增和其相同的屬性,具體如下:

<ul style=”-webkit-transform: translate3d(0, 0, 0); -webkit-transition: 0ms; “>

<li style=”-webkit-transform: translate3d(0, 0, 0); “><img src=”http://pic2.58.com/m58/m3/img/imglogo_gray.png” ref=”http://1.pic.58control.cn/p1/big/n_22998799743506.jpg”></li>

</ul>

2、在其元素中新增如下屬性:

-webkit-backface-visibility: hidden; (設定進行轉換的元素的背面在面對使用者時是否可見:隱藏)

-webkit-transform-style: preserve-3d; (設定內嵌的元素在3D 空間如何呈現:保留3D )

問題四;ios6修復了css position:fixed 1畫素抖動的bug,不過引出另一個bug:當給指定元素新增position:fixed時首次載入頁面完成後,滑動整個網頁,新增此樣式的元素會跟隨頁面滾動(目的是固定此元素)。

解決方法:

為其元素新增如下css屬性即可:

-webkit-transform:translate3d(0,0,0)(具體原因不知)

問題五:android手機,微信6.1,qq瀏覽器x5核心,這三個條件存在的前提下,在彈出輸入框的時候,整個canvas畫面會被壓扁。希望微信以後升級能解決這個問題吧。

解決方案:

目前還沒有找到完美的解決方案,如果有人知道,請一定告訴我。

感覺現在最好的辦法就是將canvas頁面和有輸入框的頁面分離開。

還有一種方法只能解決一部分手機的問題,就是在canvas的上一層的div中,設定style.width和style.height分別等於canvas的style.width和style.height,但是經過測試,這樣只能解決一部分手機。

問題六:android4.x中一部分手機,在改變canvas大小的時候有時會卡死。大家可能都知道,重新設定canvas的大小可以實現canvas的完全重新整理,但是也會導致一部分4.x手機卡死。

解決方案:

用clearRect重新整理canvas。