JavaScript編寫(xiě)檢測(cè)用戶所使用的瀏覽器的代碼示例
來(lái)源:易賢網(wǎng) 閱讀:627 次 日期:2016-07-02 13:57:46
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript編寫(xiě)檢測(cè)用戶所使用的瀏覽器的代碼示例”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了JavaScript編寫(xiě)檢測(cè)用戶所使用的瀏覽器的代碼示例,這樣就可以根據(jù)用戶的瀏覽狀態(tài)來(lái)調(diào)整桌面版移動(dòng)版或者兼容性的頁(yè)面,需要的朋友可以參考下

能力檢測(cè)

在編寫(xiě)代碼之前先檢測(cè)特定瀏覽器的能力。例如,腳本在調(diào)用某個(gè)函數(shù)之前,可能要先檢測(cè)該函數(shù)首付存在。這種檢測(cè)方法將開(kāi)發(fā)人員從考慮具體的瀏覽器類(lèi)型和版本中解放出來(lái),讓他們把注意力集中到相應(yīng)的能力是否存在上。能力檢測(cè)無(wú)法精確地檢測(cè)特定的瀏覽器和版本。

怪癖檢測(cè)

怪癖實(shí)際上是瀏覽器實(shí)現(xiàn)中存在的bug,例如早期的webkit中就存在一個(gè)怪癖,即它會(huì)再for-in循環(huán)中返回被隱藏的屬性。怪癖檢測(cè)通常涉及到運(yùn)行一段代碼,然后確定瀏覽器是否存在某個(gè)怪癖。由于怪癖檢測(cè)無(wú)法精確地檢測(cè)特定的瀏覽器和版本。

用戶代理檢測(cè)

通過(guò)檢測(cè)用戶代理字符串來(lái)識(shí)別瀏覽器。用戶代理字符串中包含大量與瀏覽器有關(guān)的信息,包括瀏覽器、平臺(tái)、操作系統(tǒng)及瀏覽器版本。用戶代理字符串有過(guò)一段相當(dāng)長(zhǎng)的發(fā)展歷史,在此期間,瀏覽器提供商視圖通過(guò)在用戶代理字符串總添加一些欺騙性信息,欺騙網(wǎng)站詳細(xì)自己的瀏覽器是另外一種瀏覽器。用戶代理檢測(cè)需要特殊的技巧,特別是要注意Opera會(huì)隱瞞其用戶代理字符串的情況。即便如此,通過(guò)用戶代理字符串仍然能夠檢測(cè)出瀏覽器所用的呈現(xiàn)引擎以及所在的平臺(tái),包括移動(dòng)設(shè)備和游戲系統(tǒng)。

在每一次HTTP請(qǐng)求過(guò)程中,用戶代理字符串是作為響應(yīng)首部發(fā)送的,而且該字符串可以通過(guò)Javascript的navigator.userAgent屬性訪問(wèn)。在服務(wù)器端,通過(guò)檢測(cè)用戶代理字符串來(lái)確定用戶使用的瀏覽器是一種常用而且廣為接受的做法。而在客戶端,用戶代理檢測(cè)一般被當(dāng)作一種萬(wàn)不得已的做法,其優(yōu)先級(jí)排在能力檢測(cè)和怪癖檢測(cè)之后。

var client = function(){

 // 呈現(xiàn)引擎

 var engine = {

  ie:0,

  gecko:0,

  webkit:0,

  khtml:0,

  opera:0,

  // 完整的版本號(hào)

  ver:null

 };

 // 瀏覽器

 var browser = {

  // 主要瀏覽器

  ie:0,

  firefox:0,

  safari:0,

  konq:0,

  opera:0,

  chrome:0,

  // 具體的版本號(hào)

  ver:null

 };

 // 檢測(cè)呈現(xiàn)引擎和瀏覽器

 var ua = navigator.userAgent;

 if (window.opera) {

  engine.ver = browser.ver = window.opera.version();

  engine.opera = browser.opera = parseFloat(engine.ver);

 } else if (/AppleWebKit\/(\S+)/.test(ua)) {

  engine.ver = RegExp["$1"];

  engine.webkit = parseFloat(engine.ver);

  // 確定是Chrome還是Safari

  if (/Chrome\/(\S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.chrome = parseFloat(engine.ver);

  } else if (/Version\/(S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.safari = parseFloat(browser.ver);

  } else {

   // 近似地確定版本號(hào)

   var safariVersion = 1;

   if (engine.Webkit <100) {

    safariVersion = 1;

   } else if (engine.webkit < 312) {

    safariVersion = 1.2;

   } else if (engine.webkit < 412) {

    safariVersion = 1.3;

   } else {

    safariVersion = 2;

   }

   browser.safari = browser.ver = safariVersion;

  }

 } else if (/KHTML\/(S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)) {

  engine.ver = browser.ver = RegExp["$1"];

  engine.khtml = browser.kong = parseFloat(engine.ver);

 } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){

  engine.ver = RegExp["$1"];

  engine.gecko = parseFloat(engine.ver);

  // 確定是不是firefox

  if (/Firefox\/(S+)/.test(ua)) {

   browser.ver = RegExp["$1"];

   browser.firefox = parseFloat(browser.ver);

  }

 } else if (/MSIE ([^;]+)/.test(ua)) {

  engine.ver = browser.ver = RegExp["$1"];

  engine.ie = browser.ie = parseFloat(engine.ver);

 }

 // 檢測(cè)瀏覽器

 browser.ie = engine.ie;

 browser.opera = engine.opera;

 // 返回這些對(duì)象

 return {

  engine:engine,

  browser: browser

 }

}();

console.log(client.engine);

console.log(client.browser);

Tangram 檢測(cè)瀏覽器源碼

/**

 * 聲明baidu包

 */

var baidu = baidu || {version: "1-3-2"}; // meizz 20100513 將 guid 升級(jí)成 \x06

baidu.guid = "$BAIDU$";//提出guid,防止修改window[undefined] 20100504 berg

/**

 * meizz 2010/02/04

 * 頂級(jí)域名 baidu 有可能被閉包劫持,而需要頁(yè)面級(jí)唯一信息時(shí)需要用到下面這個(gè)對(duì)象

 */

window[baidu.guid] = window[baidu.guid] || {};

/**

 * 聲明baidu.browser包

 */

baidu.browser = baidu.browser || {};

/**

 * 判斷是否為isGecko

 */

baidu.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent);

/**

 * 判斷是否為isWebkit

 */

baidu.browser.isWebkit = /webkit/i.test(navigator.userAgent);

/**

 * 判斷是否為標(biāo)準(zhǔn)模式

 */

baidu.browser.isStrict = document.compatMode == "CSS1Compat";

/**

 * 判斷是否為safari瀏覽器

 */

if ((/(\d+\.\d)(\.\d)?\s+safari/i.test(navigator.userAgent) && !/chrome/i.test(navigator.userAgent))) {

 baidu.browser.safari = parseFloat(RegExp['\x241']);

}

/**

 * 判斷是否為opera瀏覽器

 */

if (/opera\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.opera = parseFloat(RegExp['\x241']);

}

/**

 * 判斷是否為chrome瀏覽器

 */

if (/chrome\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.chrome = parseFloat(RegExp['\x241']);

}

/**

 * 判斷是否為ie瀏覽器

 */

if (/msie (\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.ie = baidu.browser.ie = document.documentMode || parseFloat(RegExp['\x241']);

}

/**

 * 判斷是否為firefox瀏覽器

 */

if (/firefox\/(\d+\.\d)/i.test(navigator.userAgent)) {

 baidu.browser.firefox = parseFloat(RegExp['\x241']);

 // '\x241' 是八進(jìn)制表示法 '\x24' 對(duì)應(yīng)字符 '$' ,所以 '\x241' 等同于 '$1'

}

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)