溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HTML5特性檢測

發(fā)布時(shí)間:2020-07-08 16:55:11 來源:網(wǎng)絡(luò) 閱讀:1436 作者:945996501 欄目:移動開發(fā)

簡介

做web前段開發(fā)人員已經(jīng)習(xí)慣了處理多瀏覽器兼容(如IE、firefox、chrome)、多瀏覽器版本兼容(Ie6、ie7、ie8、ie9),我們需呀從js和css上考慮讓它如何兼容,如何一致;HTML5也一樣,只是它更廣泛的被瀏覽器開發(fā)商接受并兼容,而且效果良好;但是這里仍舊有一個問題,就是“有些老的瀏覽器不支持” :(;你把html5用的爐火純青,忽然來個ie6用戶;所以我們需要對瀏覽器對html5的支持做一定的檢測,從而給用戶以有好提示;

起初前端工程師們就極力反對瀏覽器檢測,他們認(rèn)為類似user-agent嗅探的方法是很不好的,理由是它并不是一種面向未來的代碼,無法適應(yīng)新版的瀏覽器。更好的做法是使用特性檢測

怎么檢測

當(dāng)瀏覽器在渲染web頁面的時(shí)候會構(gòu)造一個文檔對象模型(DOM),通過它來表示頁面上的HTML元素,任何一個tag都會被表示為一個對象;當(dāng)然也有windwos和document這些不和特定頁面元素綁定在一起的全局對象;

       所有的dom對象都共享一些屬性,但是有些對象會擁有特定的屬性。在支持HTML5特性的瀏覽器中,特性相關(guān)的dom對象就會有特定的屬性。通過這些特定的屬性,我們可以快速的檢測出那些html5特性是被支持的。比如常見的四種方法:

1.檢測全局對象(如window,navigator)是否擁有特定的屬性。比如檢測地理位置特性

2.創(chuàng)建一個元素,然后檢測該元素的dom對象是否擁有特定的屬性。比如檢測畫布特性

3.創(chuàng)建一個元素,然后檢測這個元素dom對象是否擁有特定的方法,調(diào)用這個方法,并檢測返回值。比如檢測支持的視頻格式

4.創(chuàng)建一個元素,給這個元素的dom對象設(shè)定特定的屬性值,然后檢測瀏覽器是否保留了該屬性值

畫布(canvas)

在網(wǎng)頁中canvas就是一塊矩形區(qū)域,在這個區(qū)域里,我們可以畫任何內(nèi)容,html5標(biāo)準(zhǔn)中定義了一系列的canvas的api,用于繪制簡單圖形、定義路徑、創(chuàng)建漸變、應(yīng)用圖像變換等。

檢測canvas api,可以通過創(chuàng)建canvas元素,判斷其dom對象是否有g(shù)etContext()方法; 


        //Canvas
        function supportCanvas() {            return !!document.createElement("canvas").getContext;
        }

 

畫布文本(Canvas Text)

瀏覽器支持canvas api但不一定支持canvas text api,因?yàn)閏anvas api一直都在不斷完善中,cavas text(繪制文本)后來才被納入規(guī)范;既然如此,支持canvas text api必須要支持canvas api(見上),如果李蘭奇支持canvas api,那么在獲得canvas繪圖上下文后,可以判斷是否有filltext方法,如果存在這個方法,則可以斷定瀏覽器支持canvas text  api. 

//Canvas Text

        function supportCanvasText() {

            if (!supportCanvas) {

                return false;

            }

            var canvas = document.createElement("canvas");

            //獲取繪圖上下文

            var context = canvas.getContext("2d"); 


            //是否有fillText方法

            return typeof context.fillText == "function";

        }

Modernizr.canvastext

 

視頻(Video)

html5標(biāo)準(zhǔn)中定義了一個新元素video,用來將視頻簽入到web頁面中;之前如果想再web頁面中嵌入視頻,只能使用apple的quick time或者adobe flash播放器這些插件;video元素的可用性不需要任何腳本檢測;我們可以為它指定多個視頻格式的文件來進(jìn)行播放,不支持html5 video的瀏覽器會忽略video標(biāo)簽,在這種情況下我們可以指定用第三方插件來播放視頻,當(dāng)然這只是處理web頁面視頻的最好解決方案;如果你的確要做檢測,當(dāng)然是可以的。和canvas類似,創(chuàng)建一個video節(jié)點(diǎn),判斷dom對象是否有某個屬性,這里使用canPlayType 

//test video

    function testVideo() {

        var isSupport = supportVideo();

        alert(isSupport ? "support video" : "do not support video");

        //alert(Modernizr.video ? "support video" : "do not support video");

    }


Modernizr.video

 

視頻格式(Video Formats)

視頻編碼算法迥異,所以目前各瀏覽器還未達(dá)成一致,使用統(tǒng)一的視頻編碼算法;但是好在這種算法已經(jīng)縮減到兩周算法上:一種是safari和iphone的編碼算法;另一種是諸如chrome和mozilla firefox這類開源瀏覽器的編碼算法;所以做視頻格式支持檢測,要分別判斷這兩種;還有一種WebM,它是一種新的開源視頻編碼格式,會在Chrome,firefox和opera的下一個版本的到支持,所以我們也檢測咯;

 

要檢測瀏覽器是否支持某視頻格式,當(dāng)然必須支持video;先創(chuàng)建video節(jié)點(diǎn),然后調(diào)用dom對象的canPlayType()方法,但是這個方法返回的不是一個bool值,因?yàn)橐曨l格式非常復(fù)雜,所以這個方法會返回一個字符串,分別為:

probably:表示瀏覽器充分把握可以播放此格式

maybe:表示瀏覽器有可能可以播放此格式

“”(空字符串):表示瀏覽器無法播放此格式

 mp4:

//mp4

        function support_h364BaseLine_VideoFormats() {

            if (!supportVideo()) {

                return false;

            }

            var v = document.createElement("video");

            return v.canPlayType("video/mp4;codecs='avc1.42E01E,mp4a.40.2'")

        }


Modernizr.video.h364

ogg:

//ogg

        function support_ogg_theora_VideoFromats() {

            if (!supportVideo()) {

                return false;

            }

            var v = document.createElement("video");

            return v.canPlayType("video/ogg;codecs='theora,vorbis'")

        }


Modernizr.video.ogg

//web m

        function support_webM_VideoFromats() {

            if (!supportVideo()) {

                return false;

            }

            var v = document.createElement("video");

            return v.canPlayType("video/webm;codecs='vp8,vorbis'")

        }


 

本地存儲(Local Storage)

HTML5本地存儲允許網(wǎng)站把信息存儲到本地的計(jì)算機(jī)上,以便在需要時(shí)獲取。這和cookie類似,但cookie是有大小先知道的,而且每次請求一個新頁面時(shí),cookie就會被發(fā)送回服務(wù)器;而html5本地存儲將信息存儲到用戶計(jì)算機(jī)上,網(wǎng)站可以再頁面加載完成后通過js獲?。粰z測瀏覽器是否支持本地存儲可以通過判斷window對象是否有l(wèi)ocalStorage屬性 

      //Local Storage
       function supportLocalStorage() {            return ('localStorage' in window) && window['localStorage'] != null;
       }

Web Workers

Web Workers提供了一種標(biāo)準(zhǔn)的方式讓瀏覽器能夠在后臺運(yùn)行js,通過web worker,可以創(chuàng)建多個“線程”并讓他們同時(shí)執(zhí)行; 

       //web workers
       function supportWebWorkers() {            return window.Worker;
       }

離線web應(yīng)用

html5支持離線web應(yīng)用,即斷開網(wǎng)絡(luò)后可以繼續(xù)訪問web應(yīng)用程序;在第一次訪問具備離線訪問的web應(yīng)用時(shí),web服務(wù)器會告訴瀏覽器哪些文件是保證離線正常工作必須得,一旦瀏覽器下載了這些必須文件,下次就可以在沒有網(wǎng)絡(luò)的情況下正常使用應(yīng)用;等下次用戶重新上線的時(shí)候,所有改動都會上傳到遠(yuǎn)程的web服務(wù)器;檢測瀏覽器是否支持離線應(yīng)用,可以通過判斷window對象是否有applicationCache屬性;

       //offline
       function supportOffLine() {            return !!window.applicationCache;
       }

地理位置(Geolocation)

瀏覽器在實(shí)現(xiàn)對html5新特性支持的同時(shí),也紛紛加入了對地理位置特性的支持。嚴(yán)格的說,地理位置特性并不屬于html5標(biāo)準(zhǔn)的一部分,它由地理位置工作組(Geolocation Working Group)負(fù)責(zé)制定標(biāo)準(zhǔn),這個工作組和html5工作組沒關(guān)系;地理位置api的使用場景非常廣泛,尤其在移動設(shè)備上;檢測瀏覽器是否支持地理位置api,可以判斷navigator是否有g(shù)eolocation屬性.


      //geolocation
        function supportGeolocation() {            return !!navigator.geolocation;
        }
Modernizr.geolocation

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI