亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

深入理解判斷IE瀏覽器的經(jīng)典方法-James Padolse

系統(tǒng) 2488 0

標(biāo)題這樣子,是為了吸引眼球,至于是不是 James?Padolsey原創(chuàng)的方法,網(wǎng)上是這么流傳的就是了。菜鳥習(xí)作,寫的不好,請(qǐng)輕拍。如果錯(cuò)誤,請(qǐng)指出,感謝。

正題:

IE瀏覽器釘子戶不斷,IE 6像個(gè)老不死的一樣存活在世界上,有人說:主要是因?yàn)閏hinese多。

我們現(xiàn)在開發(fā)網(wǎng)站都不針對(duì)IE6,需要針對(duì)的話得增加項(xiàng)目經(jīng)費(fèi),畢竟IE6及其以下的css變現(xiàn)比較坑爹。

因此,多了下面這個(gè)函數(shù),提醒客戶不要在IE6及其以下版本進(jìn)行瀏覽網(wǎng)站。

請(qǐng)看

      
        <
      
      
        html
      
      
        >
      
      
        <
      
      
        head
      
      
        >
      
      
        <
      
      
        script 
      
      
        type
      
      
        ="text/javascript"
      
      
        >
      
      
        var
      
      
         ie 
      
      
        =
      
      
         (
      
      
        function
      
      
        (){  

      
      
      
        var
      
      
         undef,  

      v 
      
      
        =
      
      
        3
      
      
        ,  

      div 
      
      
        =
      
      
         document.createElement(
      
      
        '
      
      
        div
      
      
        '
      
      
        ),  

      all 
      
      
        =
      
      
         div.getElementsByTagName(
      
      
        '
      
      
        i
      
      
        '
      
      
        );         

      
      
      
        while
      
      
         (  

        div.innerHTML 
      
      
        =
      
      
        '
      
      
        <!--[if gt IE 
      
      
        '
      
      
        +
      
      
         (
      
      
        ++
      
      
        v) 
      
      
        +
      
      
        '
      
      
        ]><i></i><![endif]-->
      
      
        '
      
      
        ,

        all[
      
      
        0
      
      
        ]

      ) ;   

      
      
      
        return
      
      
         v 
      
      
        >
      
      
        4
      
      
        ?
      
      
         v : undef  

      }());

    
      
      
        function
      
      
         is_ie(){        

      
      
      
        if
      
      
        (
      
      
        !
      
      
        ie)

        alert(
      
      
        "
      
      
        您當(dāng)前使用非Microsoft Internet Explorer.
      
      
        "
      
      
        );

      
      
      
        else
      
      
        if
      
      
         (ie
      
      
        <=
      
      
        6
      
      
        )

        alert(
      
      
        "
      
      
        您當(dāng)前使用的瀏覽器版本過低。為獲取良好的用戶體驗(yàn),\n請(qǐng)選擇 IE 7.0 及其以上版本的Microsoft Internet Explorer.
      
      
        "
      
      
        );    
        
  }//一樓
Jefft ? 評(píng)論說漏了一半大括號(hào),現(xiàn)在補(bǔ)充了,多謝了。
      
        
</ script >
      
        </
      
      
        head
      
      
        >
      
      
        <
      
      
        body 
      
      
        onload
      
      
        ="is_ie()"
      
      
        >
      
      
        </
      
      
        body
      
      
        >
      
      
        </
      
      
        html
      
      
        >
      
    

這算是最簡(jiǎn)單又最高高效的IE判別方法了。不過,大部分人看不懂。

下面解析下為什么這樣子:我的理解,如有錯(cuò)誤,敬請(qǐng)指出,共同學(xué)習(xí),多謝。

首先怎么調(diào)用,我就不講了,如果不是IE,直接將ie賦值為undef的值,就是undefined,現(xiàn)在直接講講這貨的代碼塊里面這個(gè)吧。

      
        while (  

  div.innerHTML = '
      
      
        <!--
      
      
        [if gt IE ' + (++v) + ']><i></i><![endif]
      
      
        -->
      
      
        ',

  all[0]

) ;
      
    

這段代碼。聽巧妙的用到了逗號(hào)表達(dá)式,逗號(hào)表達(dá)式就是在表達(dá)式中,無論什么情況,返回最后一個(gè)子表達(dá)式的值,在這里就是返回all[0]的值了。

前面的div的賦值,為什么要放在這里,是因?yàn)檫@樣子才能保證每次循環(huán)都能賦值,原創(chuàng)者這樣寫的話,是為了精簡(jiǎn),這段代碼,已經(jīng)不能再精簡(jiǎn)了。

其實(shí),能改成另外一種符合常人思維的形式。如下

      
        do {  

  div.innerHTML = '
      
      
        <!--
      
      
        [if gt IE ' + (++v) + ']><i></i><![endif]
      
      
        -->
      
      
        ';         

}while(all[0])  
      
    

改成這樣子,while循環(huán)應(yīng)該能看懂了吧?

其實(shí)不然,畢竟控制循環(huán)的變量很難理解對(duì)吧。

首先我們測(cè)試一下,就在這個(gè)while循環(huán)的下面,寫上 alert(all[0]),

      
        do {  

  div.innerHTML = '
      
      
        <!--
      
      
        [if gt IE ' + (++v) + ']><i></i><![endif]
      
      
        -->
      
      
        ';         

}while(all[0]) 

alert(all[0])
      
    

你會(huì)發(fā)現(xiàn),警告都是 undefined 。

但是,如果將這個(gè)寫在while循環(huán)里面,你會(huì)發(fā)現(xiàn),最后的那次警告必然是undefined ,之前的都是object(IEtester下面),非IE瀏覽器的話,只有一個(gè)警告,為undefined。代碼如下,

      
        do {  

  div.innerHTML = '
      
      
        <!--
      
      
        [if gt IE ' + (++v) + ']><i></i><![endif]
      
      
        -->
      
      
        ';

  alert(all[0])         

}while(all[0]) 
      
    

說道這里,大家應(yīng)該知道用什么變量控制while循環(huán)的吧。

然后講講為什么all[0]會(huì)被賦值成為這樣。下面根據(jù)w3c標(biāo)準(zhǔn)來講講看。

因?yàn)? getElementsByTagName這個(gè)函數(shù)返回的是一個(gè)指向 NodeList類型,請(qǐng)看 getElementsByTagName

而當(dāng) div進(jìn)行了重新賦值之后,應(yīng)為NodeList 是活動(dòng)的(目測(cè)這么翻譯,摘自? NodeList ?objects in the DOM are? live . 摘自 Interface NodeList ),所以整個(gè)NodeList的對(duì)象集合也就發(fā)生改變。請(qǐng)看 live ?。

因此,all每次指向的東西都是不變的,變的是NodeList,all[0]指向的是NodeList的第一個(gè) i 元素,也因此發(fā)生改變。

然后講講,為什么通過這樣子的判斷能判斷出all[0]到底是object還是undefined呢?

原因很簡(jiǎn)單,就是,非IE瀏覽器不認(rèn)識(shí)這樣的條件注釋。IE瀏覽器也不認(rèn)不能相對(duì)應(yīng)的那些條件注釋。

下面是部分條件注釋寫法。

      
        <!--
      
      
        [if IE]><i>您使用的是IE瀏覽器。</i><![endif]
      
      
        -->
      
      
        <!--
      
      
        [if IE 6]><i>歡迎使用Internet Explorer 6</i><![endif]
      
      
        -->
      
      
        <!--
      
      
        [if !(IE 6)]><i>您正在使用的不是 IE6。</i><![endif]
      
      
        -->
      
    

太多,我就不寫出來,詳細(xì)規(guī)則請(qǐng)看 微軟官方

到了這里,大家應(yīng)該大概了解了吧。

估計(jì)現(xiàn)在大家看我這篇文章的時(shí)候,用的都不是IE,那就舉一個(gè)是IE的例子。

      
        <!--
      
      
        [if IE]><i>您使用的不是IE瀏覽器。</i><![endif]
      
      
        -->
      
    

如果是IE瀏覽器,那么這段東西里面的<i></i>標(biāo)簽就能被 IE瀏覽器當(dāng)正常的DOM元素。

如果不是IE瀏覽器,那么“[if IE]><i>您使用的不是IE瀏覽器。</i><![endif]”整一句都會(huì)被當(dāng)場(chǎng)注釋掉了。至于 [if !IE],目前來說,還是不能被非IE正確判別。

講到這里,大家還不懂的話,那么我這篇文章寫得不好。抱歉浪費(fèi)您的時(shí)間來看了。

感謝一樓 Jefft ?和 xiiiiii 指導(dǎo)錯(cuò)誤。

深入理解判斷IE瀏覽器的經(jīng)典方法-James Padolsey判斷法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 999久久久免费精品国产牛牛 | 成人18毛片| 欧美精品久久 | 中文字幕不卡免费视频 | 热思思久久 | 色中色资源站 | 精品视频在线一区 | 国产美女久久久久 | 日韩欧美印度一级毛片 | 久久狠狠第一麻豆婷婷天天 | 国产一区二区三区国产精品 | 日韩一区二区三区视频 | 国产91精品系列在线观看 | 香蕉黄色网| 国产精品免费播放 | 久热中文 | 欧美人成人亚洲专区中文字幕 | 激情一区二区三区成人 | 欧美最大成人毛片视频网站 | 久草青草 | a资源在线| 免费日韩精品 | 国产伦久视频免费观看 视频 | 精品久久久久久中文字幕2017 | 九九99九九在线精品视频 | 四虎4hu影库免费永久国产 | 日本高清视频www夜色资源 | 免费一区二区三区免费视频 | 国产a不卡片精品免费观看 国产a高清 | 亚洲高清免费 | 九九精| 四虎影视www| 成人在线免费视频播放 | 成人精品区 | 亚洲视屏在线观看 | 不卡免费在线视频 | 日本精品在线视频 | 国产午夜精品一区二区 | 欧美肥老太婆交 | 日本久久久久久久中文字幕 | 亚洲视频免费看 |