2013-03-28 52 views
0

我在我們的網站上實施的Extjs元素存在一些問題,需要執行一些特定於IE10的樣式來解決這些問題。據我所知,IE10不再支持舊的IE風格評論,你可以根據IE的版本有條件地指定不同的html標籤和不同的類。因此,在這種情況下,我將不得不使用jQuery爲IE10類添加不是最佳解決方案的HTML標籤,但是由於我們的用戶需要啓用Javascript,因此這是我們目前的最佳選擇。針對帶有附加到html標籤的IE10類的IE10

我目前使用下面的代碼段,試圖實現這一點:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script> 
    <script type="text/javascript"> 
     if ($.browser.msie && $.browser.version == 10) { 
     $("html").addClass("ie10"); 
    } 
    </script> 

但是如果我看在開發人員模式/查看IE10的頁面的源代碼,沒有什麼是追加到HTML標籤。然後我用螢火蟲(因爲IE的開發工具是可怕的),以檢查是否有與我所用的腳本中的任何問題,我在我的控制檯以下消息:

TypeError: $.browser is undefined 
    [Break On This Error] 

     if ($.browser.msie && $.browser.version == 10) { 

正如我很少使用JavaScript瀏覽器檢測我承認我從網絡上借用了這個腳本,所有的評論都表明它的工作原理,但是你可以看到它顯然沒有。

有沒有人有任何想法,可以如何調整,以便它可以工作,或者確實有任何替代方案,我可以用我的CSS特別針對IE10?

+1

你的問題的原因是因爲從版本1.9開始,瀏覽器不再是jQuery的一部分。你最好使用像Modernizr這樣的特徵檢測。 – Alex 2013-03-28 10:37:32

+0

好的,那麼替代方法是什麼? – jezzipin 2013-03-28 10:38:37

+0

在這裏看到http://stackoverflow.com/questions/9645803/whats-the-replacement-for-browser更多信息 – 2013-03-28 10:39:27

回答

3

你可以使用條件編譯來獲得IE10,這是一個好方法,因爲它不依賴於jQuery或任何可能被欺騙(afaik)的東西。

在IE8,IE9,IE10,Chrome上測試它,並按預期工作。

用法:

if(Function('/*@cc_on return [email protected]*/')()){ $("html").addClass("ie10"); }

閱讀:因爲jQuery的V1.3 https://stackoverflow.com/a/13971998/1711038

+1

我只是想輸入這個解決方案,但你打敗了我。這似乎是所有建議中唯一成功的方法。 – jezzipin 2013-03-28 10:59:16

0

jQuery的$.browser功能已被棄用。

更重要的是,對於1.9版本的jQuery,jQuery刪除了很多舊的棄用功能,包括這一個。這就是它不適合你的原因。

如果你必須使用舊的棄用功能,jQuery開發人員提供了一個單獨的遷移庫,它將帶回所有舊功能。但它只是真正用於短期權宜之計;推薦的解決方案是修復您的代碼,使其不使用舊功能。

jQuery棄用$.browser的原因是因爲瀏覽器檢測被認爲是不好的做法。幾乎在任何情況下,你都希望這樣做,有一個更好的,更符合標準的解決問題的方法,而瀏覽器越新,就越有可能是這種情況 - 有充分理由證明仍然使用瀏覽器檢測IE6等,但IE10是一個相當不錯的瀏覽器,如果你真的有一個不可逾越的問題,我會很驚訝。

有幾種方法可以檢測IE10(我注意到你已經接受了一個答案),但說實話,我認爲你最好找到造型問題的根本原因,並解決這個問題,因爲否則當IE11發佈時你將會再次進行這個完整的exersise。

+0

根本原因是一段CSS,它將ExtJS中的下拉菜單應用於特定於IE的陰影效果。如果將其刪除,則會影響我們支持的舊瀏覽器的外觀和風格。因此,我們只需要爲IE10刪除它,爲什麼在這種情況下需要瀏覽器特定的目標IS。儘管感謝您的回覆。所有我已經知道的東西,但對於那些多年來一直沒有在網絡上開發的用戶會有所幫助。 – jezzipin 2013-03-28 11:13:40

0

正如你使用ExtJS爲什麼不使用它來解決問題?

的ExtJS 3.4.0不承認IE10但它有一個覆蓋:https://market.sencha.com/extensions/ext-isie10-for-extjs-3-x

那麼你可以使用:

if (Ext.isIE10){ 
    Ext.fly(document.body.parentNode).addClass('ie10'); 
} 

工作代碼:

Ext.onReady(function() { 
    // override v3.4.0 ie10 = ie6 bug 
    // https://market.sencha.com/extensions/ext-isie10-for-extjs-3-x 
    (function() { 

     var ua = navigator.userAgent.toLowerCase(); 
     check = function(r) { 
      return r.test(ua); 
     }, 
      isIE10 = Ext.isIE && check(/msie 10/), 
      isIE6 = Ext.isIE && !Ext.isIE7 && !Ext.isIE8 && !Ext.isIE9 && !isIE10; 

     /** 
     * True if the detected browser is Internet Explorer 6.x. 
     * @type Boolean 
     */ 
     Ext.isIE6 = isIE6; 

     /** 
     * True if the detected browser is Internet Explorer 10.x. 
     * @type Boolean 
     */ 
     Ext.isIE10 = isIE10; 

    })(); 

    if (Ext.isIE10){ 
     Ext.fly(document.body.parentNode).addClass('ie10'); 
    } 

}); 
+0

感謝這一點,但我傾向於避免ExtJS編程,並堅持像jQuery的其他庫。另外,因爲我不爲我們公司做ExtJS編程,所以我不想介紹可能影響其他功能的功能。 – jezzipin 2013-04-08 10:25:33

0

如果你是隻對瀏覽器檢測IE感興趣,然後我們使用下面的方法似乎工作。您可以通過傳遞正確的ID來更改要添加的DIV。

<!--[if IE 10]> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#ieFix").addClass("ie10"); 
     }); 
    </script> 
<![endif]--> 
+0

這是一個壞主意。 IE特定的類應該被添加到HTML或body中,而不是像這樣的特定元素。如果您有多個需要修復的元素,該怎麼辦?你將不得不單獨爲它們添加它。 – jezzipin 2013-07-01 14:04:33

0

佈局引擎使用功能檢測來確定瀏覽器/瀏覽器版本,並將相應的CSS類添加到html標記。它檢測IE11,IE10,IE9,IE8和IE7,以及其他流行的瀏覽器,包括一些移動瀏覽器。 http://mattstow.com/layout-engine.html