移動端瀏覽器爬坑之旅

來源:互聯網
上載者:User

標籤:

  以前總覺得移動端頁面也很容易寫,最近才下筆,簡直五步一坑,十步一雷。查閱了些資料,整理出了部分瀏覽器安全色性bug。

  有問題就跟瀏覽器客服提出來,一般他們是會處理的。那麼就以二師兄展開本次分享。

  

QQ瀏覽器X5核心問題匯總https://www.qianduan.net/qqliu-lan-qi-x5nei-he-wen-ti-hui-zong/瀏覽器

因為瀏覽器屏蔽了一部分連結圖片,所以需要引導使用者去開啟新頁面,可以用以下方式判斷瀏覽器的ua

function is_weixn(){    var ua = navigator.userAgent.toLowerCase();    if(ua.match(/MicroMessenger/i)=="micromessenger") {        return true;    } else {        return false;    }}

後端判斷也很簡單,比如php

function is_weixin(){    if ( strpos($_SERVER[‘HTTP_USER_AGENT‘], ‘MicroMessenger‘) !== false ) {            return true;    }      return false;}

【UC瀏覽器】video標籤脫離文檔流

情境:標籤的父元素(祖輩元素)設定transform樣式後,標籤會脫離文檔流。

測試環境:UC瀏覽器 8.7/8.6 + Android 2.3/4.0 。

Demo:http://t.cn/zj3xiyu

解決方案:不使用transform屬性。translate用top、margin等屬性替代。

 
【UC瀏覽器】position:fixed 屬性在UC瀏覽器的奇葩現象

情境:設定了position: fixed 的元素會遮擋z-index值更高的同輩元素。

   在8.6的版本,這個情況直接出現。

   在8.7之後的版本,當同輩元素的height大於713這個「神奇」的數值時,才會被遮擋。

測試環境:UC瀏覽器 8.8_beta/8.7/8.6 + Android 2.3/4.0 。

Demo:http://t.cn/zYLTSg6

 

【QQ手機瀏覽器】不支援HttpOnly

情境:帶有HttpOnly屬性的Cookie,在QQ手機瀏覽器版本從4.0開始失效。JavaScript可以直接讀取設定了HttpOnly的Cookie值。

測試環境:QQ手機瀏覽器 4.0/4.1/4.2 + Android 4.0 。

 

【MIUI原生瀏覽器】瀏覽器地址欄hash不改變

情境:location.hash 被賦值後,地址欄的地址不會改變。

   但實際上 location.href 已經更新了,通過JavaScript可以順利擷取到更新後的地址。

   雖然不影響正常訪問,但使用者無法將訪問過程中改變hash後的地址存為書籤。

測試環境:MIUI 4.0

 

【Chrome Mobile】fixed元素無法點擊

情境:父元素設定position: fixed;

   子項目設定position: absolute;

   此時,如果父元素/子項目還設定了overflow: hidden 則出現“父元素遮擋該子項目“的bug。

   視覺(view)層並沒有出現遮擋,只是無法觸發綁定在該子項目上的事件。可理解為:「看到點不到」。

補充: 頁面往下滾動,觸發position: fixed;的特性時,才會出現這個bug,在最頂不會出現。

測試平台: 小米1S,Android4.0的Chrome18

demo: http://maplejan.sinaapp.com/demo/fixed_chromemobile.html

解決辦法: 把父元素和子項目的overflow: hidden去掉。

 

使用zeptojs內嵌到android webview影響正常滾動時

https://github.com/madrobby/zepto/blob/master/src/touch.js 去掉61行,其實就是使用原生的滾動

iscroll4

iscroll4 的幾個bug(來自 http://www.mansonchor.com/blog/blog_detail_64.html 內有詳細講解)

1.滾動容器點擊input框、select等表單元素時沒有響應】

onBeforeScrollStart: function (e) { e.preventDefault(); }

改為

onBeforeScrollStart: function (e) { var nodeType = e.explicitOriginalTarget © e.explicitOriginalTarget.nodeName.toLowerCase():(e.target © e.target.nodeName.toLowerCase():‘‘);if(nodeType !=‘select‘&& nodeType !=‘option‘&& nodeType !=‘input‘&& nodeType!=‘textarea‘) e.preventDefault(); }

2.往iscroll容器內新增內容時,容器閃動的bug

原始碼的

has3d = ‘WebKitCSSMatrix‘ in window && ‘m11‘ in new WebKitCSSMatrix()

改成

has3d = false

在配置iscroll時,useTransition設定成false

3.過長的滾動內容,導致卡頓和app直接閃退

  1. 不要使用checkDOMChanges。雖然checkDOMChanges很方便,定時檢測容器長度是否變化來refresh,但這也意味著你要消耗一個Interval的記憶體空間
  2. 隱藏iscroll捲軸,配置時設定hScrollbar和vScrollbar為false。
  3. 不得已的情況下,去掉各種效果,momentum、useTransform、useTransition都設定為false

4.左右滾動時,不能正確響應本文上下拉動

iscroll的閃動問題也與渲染有關係,可以參考 運用webkit繪製渲染頁面原理解決iscroll4閃動的問題 iscroll4升級到5要注意的問題

iscroll或者滾動類架構滾動時不點擊的方法

可以使用以下的解決方案(利用data-setapi)

<a ontouchmove="this.s=1" ontouchend="this.s || window.open(this.dataset.href),this.s=0" target="_blank" data-href="http://www.hao123.com/topic/pig">黃浦江死豬之謎</a>

也可以用這種方法

    $(document).delegate(‘[data-target]‘, ‘touchmove‘, function () {        $(this).attr(‘moving‘,‘moving‘);    })    $(document).delegate(‘[data-target]‘, ‘touchend‘, function () {        if ($(this).attr(‘moving‘) !== ‘moving‘) {         //做你想做的。。            $(this).attr(‘moving‘, ‘notMoving‘);        } else {            $(this).attr(‘moving‘, ‘notMoving‘);        }    })

 

 

以上來源於司徒正美的github
https://github.com/RubyLouvre/mobileHack

移動端瀏覽器爬坑之旅

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.