国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

使用JavaScript檢測瀏覽器的相關特性

2024-04-27 13:56:04
字體:
來源:轉載
供稿:網友

一、檢測瀏覽器的名稱
問題:
    不同的瀏覽器對javaScript的標準支持也有不同,有時希望腳本能夠在不同的瀏覽器上都能運行良好,這時需要對瀏覽器進行檢測,確定其名稱,以針對不同的瀏覽器編寫相應的腳本。
解決方案:
    使用navigator對象的appName屬性。
    比如,要檢測瀏覽器是否為IE,可以這么做:
    var isIE = (navigator.appName == "Microsoft Internet Explorer");
    document.write("is IE?" + isIE);
    對于Firefox,navigator對象的appName屬性值為"Netscape";Opera9.02的appName屬性值為"Opera"(其更早版本可能不同);

二、檢測瀏覽器的版本號:
問題:
    隨著瀏覽器的版本的更迭,瀏覽器所支持的腳本特性也在變化,有時候就需要針對不同的版本編寫相應的腳本,那么如何獲得瀏覽器的版本號?
解決方案:
    通過解析navigator對象的userAgent屬性來獲得瀏覽器的完整版本號。
    IE將自己標識為MSIE,后面帶一個空格,版本號以及分號。所以我們只要取空格和分號之間的部分即可。如Windows xp SP2所帶的IE的userAgent屬性值為"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",可以看到其版本為6.0。可以用如下的函數來獲取IE瀏覽器的版本號:
    function getIEVersonNumber()
    {
        var ua = navigator.userAgent;
        var msieOffset = ua.indexOf("MSIE ");
        if(msieOffset < 0)
        {
            return 0;
        }
        return parseFloat(ua.substring(msieOffset + 5, ua.indexOf(";", msieOffset)));
    }
假設我們要為IE5及以上版本編寫腳本,可以這么寫:
    var isIE5Min = (getIEVersonNumber() >= 5);
    if(isIE5Min)
    {
        // perform statements for IE 5 or later
    }
    對于FireFox和Opera等瀏覽器,也可以用navigator.userAgent屬性來獲取其版本號,只不過其形式與IE有所不同,如FireFox:
    Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7
    Opera:Opera/9.02 (Windows NT 5.1; U; en)根據這些形式,我們不難獲得其版本號。但這些瀏覽器的其它版本沒有測試過,其具體值不明確,如果要使用這種方法檢測,請自行驗證。

    下面討論下,上面的那段為IE5及以上版本瀏覽器編寫的腳本,使用這種寫法要注意:要用>=而不是==,一般情況下,我們可以假定瀏覽器是向后兼容的,所以使用==顯然不能適應新版本;另一方面,我們上面的假定也僅僅是假定,不能確保是這樣,如果瀏覽器的某些對象或屬性不能向后兼容,我們的代碼也會產生問題,所以建議,少用瀏覽器版本的比較,更多情況下,應檢測是要用的對象或屬性是否得到支持。

三、檢測客戶端的操作系統類型
根據上面的討論可以看到,navigator.userAgent屬性通常含有操作系統的基本信息,但很不幸,沒有統一的規則去根據userAgent獲取準確的操作系統信息,因為這些值與瀏覽器的種類、瀏覽器的版本甚至瀏覽器的OEM版本都有關系。
通常我們能做的是,檢測一些更為通用的信息,比如操作系統是Windows還是Mac,而不是去看是Windows 98還是Windows XP。其規則是所有的Windows版本都會含有"Win",所有的Macintosh版本都含有"Mac",所有的Unix則含有"X11",而在linux下則同時包含"X11"和"Linux"。如:
    var isWin = (navigator.userAgent.indexOf("Win") != -1);
    var isMac = (navigator.userAgent.indexOf("Mac") != -1);
    var isUnix = (navigator.userAgent.indexOf("X11") != -1);
通常用在為不同的操作系統設置不同的字體或位置等樣式。

四、檢測瀏覽器對特定對象的支持
問題:
    如果需要編寫對多種瀏覽器或瀏覽器的多個版本都能適用的腳本,就要進行檢測一下,瀏覽器是否支持某個對象。當然這種檢測主要是針對那些潛在的不兼容對象的語句。
解決方案:
    早期的瀏覽器對于img元素的支持差別很大,所以要在腳本中操作img元素,需要檢測瀏覽器是否支持。這時我們不需要對所有可能的瀏覽器一一檢測,只需在必要的地方用下面的方式檢測:
    function rollover(imgName, imgSrc)
    {
        // 如果支持images對象
        if(document.images)
        {
            // statements go here
        }
    }
    這種方法能夠生效是基于一個事實:如果document.images對象不存在,那么if求值的結果為false。

    使用這種方法,使得對對象的檢測變得簡單易行,但是我們要注意,對于那些不支持該對象的瀏覽器要如何較好得處理。看下面的代碼:
    function getImgAreas()
    {
        var result = 0;
        for(var i = 0; i < document.images.length; i++)
        {
            result += (document.images[i].width * document.images[i].height);
        }
        return result;
    }
  
    function reportImageArea()
    {
        document.form1.imgData.value = getImgAreas();
    }
    這里沒用對象支持的檢測。如果瀏覽器支持document.images,這兩個函數運行正常;否則就會拋出異常。下面是改進的腳本:
    function getImgAreas()
    {
        var result;
        // 檢測瀏覽器是否支持對象
        if (document.images)
        {
            result = 0;
            for (var i = 0; i < document.images.length; i++)
            {
                result += (document.images[i].width * document.images[i].height);
            }
        }
        // 返回值為一個數字或null
        return result;
    }
    function reportImageArea()
    {
        // 現在可以判斷返回值
        var imgArea = getImgAreas();
        var output;
        if (imgArea == null)
        {
            // 對于不支持images對象的瀏覽器也要給出相應信息
            output = "Unknown";
        } else {
            output = imgArea;
        }
        document.reportForm.imgData.value = output;
    }
這樣,不管瀏覽器是否支持該對象,都能給用戶比較合理的信息,而不會跳出突兀的錯誤信息。

五、檢測瀏覽器對特定屬性和方法的支持
問題:
    檢測一個對象是否含有某個特定的屬性或方法。
解決方案:
    大多數情況下,可以用類似于下面的代碼來判斷:
    if(objectTest && objectPRopertyTest)
    {
        // OK to work with property
    }
    先檢測對象是否存在,然后再檢測對象的屬性是否存在。如果對象確實不存在,該方法有效;如果屬性存在,但其值為null, 0, false,if語句求值的結果也將是false!所以這種方法并不安全,最好的方法是這樣:
    if (objectReference && typeof(objectReference.propertyName) != "undefined")
    {
        // OK to work with property
    }
    對于方法的檢測也可用類似的方法:
    function myFunction()
    {
        if (document.getElementById)
        {
            // 這里可以使用getElementById方法
        }
    }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大田县| 西城区| 饶平县| 株洲县| 罗山县| 札达县| 临沂市| 阳东县| 康保县| 翼城县| 定南县| 托里县| 余江县| 井陉县| 淅川县| 兴文县| 十堰市| 纳雍县| 徐汇区| 化德县| 商都县| 都兰县| 交城县| 克山县| 旌德县| 蚌埠市| 丹东市| 辽阳市| 新和县| 聂荣县| 建瓯市| 寿光市| 都昌县| 卓资县| 连州市| 忻州市| 桃源县| 大安市| 安溪县| 洛南县| 海城市|