zepto의 detect 탐구


사실:
 
zepto는 장치와 브라우저를 판단하기 위한 함수 인터페이스가 있습니다
 
iOS 에뮬레이터를 사용하여 테스트를 수행합니다.
 
//Zepto.os     
Zepto.os      :

{
   ios:true,
   iphone:true,
   version:"6.1"
}


//Zepto.browser      
Zepto.browser      :

{
   version:"536.26"
   webkit:true
}

 
 
 
소스: detect.js
 
;(function($){
  
  //    detect  ,   ua
  function detect(ua){

    //this Zepto,       :  os,  browser
    var os = this.os = {}, 
        browser = this.browser = {},

      webkit = ua.match(/WebKit\/([\d.]+)/),

      android = ua.match(/(Android)\s+([\d.]+)/),

      ipad = ua.match(/(iPad).*OS\s([\d_]+)/),

      iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/),

      webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),


      touchpad = webos && ua.match(/TouchPad/),

      kindle = ua.match(/Kindle\/([\d.]+)/),

      silk = ua.match(/Silk\/([\d._]+)/),

      blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/),

      bb10 = ua.match(/(BB10).*Version\/([\d.]+)/),

      rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/),

      playbook = ua.match(/PlayBook/),

      chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/),

      //    19,  firefox     :["Firefox/19.0","19.0"];
      firefox = ua.match(/Firefox\/([\d.]+)/)

    // Todo: clean this up with a better OS/browser seperation:
    // - discern (more) between multiple browsers on android
    // - decide if kindle fire in silk mode is android or not
    // - Firefox on Android doesn't specify the Android version
    // - possibly devide in os, device and browser hashes

    if (browser.webkit = !!webkit) browser.version = webkit[1]

    if (android) os.android = true, os.version = android[2]

    if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.')

    if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.')

    if (webos) os.webos = true, os.version = webos[2]

    if (touchpad) os.touchpad = true

    if (blackberry) os.blackberry = true, os.version = blackberry[2]

    if (bb10) os.bb10 = true, os.version = bb10[2]

    if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2]

    if (playbook) browser.playbook = true

    if (kindle) os.kindle = true, os.version = kindle[1]

    if (silk) browser.silk = true, browser.version = silk[1]

    if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true

    //  chrome    , browser     firefix version
    if (chrome) browser.chrome = true, browser.version = chrome[1]

    //  firefox    , browser     firefix version
    if (firefox) browser.firefox = true, browser.version = firefox[1]

    //os      tablet        
    os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/)))

    //os      phone        ,     :   pc   ,       true(           ,  ,    )
    os.phone  = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 || chrome || firefox))
  }

 
  //  detect  , navigator.userAgent     
  detect.call($, navigator.userAgent);


  // make available to unit tests
  // Zepto    key __detect    detect  function
  $.__detect = detect

})(Zepto)

좋은 웹페이지 즐겨찾기