Internet Explorer'a özgü CSS veya Internet Explorer'a özgü JavaScript kodu gibi belirli durumlar için yalnızca Internet Explorer 10'u nasıl hedeflerim?


160

Internet Explorer'a özgü CSS veya Internet Explorer'a özgü JavaScript kodu gibi belirli durumlar için yalnızca Internet Explorer 10'u nasıl hedeflerim?

Bunu denedim, ama çalışmıyor:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 koşullu yorumları yok sayar ve <html lang="en" class="no-js">yerine kullanır <html class="no-js ie10" lang="en">.


8
Daha iyi bir soru olacağını düşünüyorum: Bu CSS'nin her iki tarayıcıda da aynı görünmesini nasıl sağlayabilirim?
BentOnCoding

12
IE10 PP4 Bu @cc_onifadeyi hala desteklemektedir . Yani, aşağıdaki kodu kullanabilirsiniz IE10 desteklenen olup olmadığını tespit etmek için: <!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className+=' ie10';}</script><!--<![endif]-->. (IE hala geliştirme aşamasında olduğu için bunu bir yorum olarak yayınladım, bu yüzden son sürümün de bu özelliği destekleyip desteklemediği bilinmemektedir)
Rob W

15
@RobW - ie11 çıktıktan sonra örnek kodunuz yanlış olacaktır. Geliştirilmiş sürüm: <script>if(Function('/*@cc_on return document.documentMode===10@*/')()){document.documentElement.className+=' ie10';}</script>İyileştirmeler: koşullu yorumlara gerek yoktur; yorum soyma sıkıştırma / işleme bile çalışır; ie11 için sınıf eklenmedi; ie10 uyumluluk modunda çalışan ie11 ile çalışır; bağımsız komut dosyası etiketine ihtiyaç duymaz (sadece kafadaki diğer javascriptlere eklenebilir).
robocat

2
Yukarıdaki kod snippet'ine örnek: jsbin.com/upofoq/2
robocat

8
Daha genel bir çözüm: if(document.documentMode) document.documentElement.className+=' ie'+document.documentMode+'mode';- sorunların% 90'ını çözer (bazen uyumluluk modları başarısız olur, bu durumda bunun üzerinde başka bir düzeltme düzeyine ihtiyacınız vardır).
robocat

Yanıtlar:


65

Belki böyle bir jQuery deneyebilirsiniz:

if ($.browser.msie && $.browser.version === 10) {
  $("html").addClass("ie10");
}

Bu işlevi kullanmak için, jQuery Migrate kitaplığını eklemeniz gerekir, çünkü bu işlev ana jQuery kitaplığından kaldırılmıştır.

Benim için oldukça iyi çalıştı. Ancak şartlı yorumların yerini tutamaz!


3
== '10.0'
Sizlerden

112
Uyarı: jQuery.browserjQuery'nin (1.9) geçerli sürümünde artık eklenti yok. blog.jquery.com/2013/01/15/…
dave1010

2
Ben öneriyoruz: if (jQuery.browser.msie && jQuery.browser.version < 10) { // do what you will here }Not verion <10 IE eski sürümlerini algılamak için. IE10 ve üzeri tüm CSS3, HTML5, jquery,
vb.Ile iyi çalışıyor

1
@dan, koşullu yorumlar 10'dan daha az olan tüm IE tarayıcılarında çalışır, JS'nizi tüm tarayıcılar için karmaşık hale getirmek yerine bunları kullanır. Sadece <! - [lte IE 9]> deyin ve 10'dan küçük tüm IE sürümlerini hedefleyebilirsiniz. JS gerekmez.
edhurtig

1
@ Marc-AndréLafortune iyi bir noktaya değiniyor. Genel bir kural olarak == değil, her zaman === operatörünü kullanmalısınız. Javascript yazarken buna dikkat etmelisiniz. stackoverflow.com/questions/359494/…
Stewart

132

Ben sahte olabilir çünkü JavaScript navigator.userAgentveya $ .browser (kullanır navigator.userAgent) kullanmaz .

Internet Explorer 9, 10 ve 11'i hedeflemek için (Not: ayrıca en son Chrome):

@media screen and (min-width:0\0) { 
    /* Enter CSS here */
}

Internet Explorer 10'u hedeflemek için:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS here */
}

Edge Tarayıcıyı hedeflemek için:

@supports (-ms-accelerator:true) {
  .selector { property:value; } 
}

Kaynaklar:


Gerçekten güzel. Ancak, IE'de tarayıcı modlarına karşı çeşitli belge modlarını test ederken ne kadar endişeliyiz? Hangi durumlarda çevrimiçi kullanıcıların mevcut tarayıcı modlarından farklı bir belge modu kullanmasını bekleyebiliriz?
klewis

insanlar genellikle belge modunu değiştirmez. Yapabilirler, ancak kullanıcının belge modunu değiştirmesini gerektiren herhangi bir siteye rastlamadım. Doğru DOCTYPE kullanıyorsanız bu hiç sorun değil.
Roni

3
Kahramanımsın! Sadece bir not, Bu da bazı şeyler IE11 berbat sabit
locrizak

8
Bu ayrıca IE11'i de etkiler - bu nedenle yalnızca IE9 / 10'u hedeflemek için bir çözüm arıyorsanız, bu işe yaramaz :-(
Lukasz Lenart

1
"Hepsi tarayıcıyı tespit ediyor" ile ne demek istiyorsun navigator.userAgent? Koşullu derleme, JScript çalışma zamanının yerleşik bir özelliğidir ve kullanıcı aracısı dizesi aracılığıyla taklit edilemez.
BoltClock

111

Bu sitede birisinin değerli bir yorumu olduğu bir çözüm buldum :

Çözüm şudur:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

O

  • koşullu yorumlara gerek yoktur;
  • yorum soyma sıkıştırma / işleme bile çalışır;
  • Internet Explorer 11'e ie10 sınıfı eklenmedi;
  • Internet Explorer 10 uyumluluk modunda çalışan Internet Explorer 11 ile çalışma olasılığı daha yüksektir;
  • bağımsız komut dosyası etiketine ihtiyaç duymaz (yalnızca kafadaki diğer JavaScript kodlarına eklenebilir).
  • test etmek için jQuery gerekmez

3
@ dave1010 Kullanıcı aracıları kolayca aldatılabilir. Koşullu yorumlar yalnızca IE4 + 'da (10 dahil) bulunan JScript motoru tarafından desteklenir.
Rob W

2
@ dave1010 Tanımladığınız şeyi yapan, çalışan bir ayrıştırıcı yazmak zor ve son derece düşüktür. Bu tür bir uzantıyı kasıtlı olarak oluşturan ve yükleyen herkes büyük olasılıkla IE gibi davranmaya niyetlidir (belki Windows dışındaki ortamlarda otomatik test amacıyla?). Tarayıcılarda% 100 güven asla garanti edilmez, ancak yeterince yakınlaşabilirsiniz. Koşullu yorumlar, IE tarafından kullanılan JScript motorunu algılamanın oldukça güvenilir bir yoludur.
Rob W

3
görebildiğim tek dezavantaj, js, hangi koşulların yapmadığını gerektirir
James Westgate

4
Bu en iyi yanıt olmalı ve JS gereksinimi IE10 kullanıcıları için tartışmalıdır - JS devre dışı bırakılmışsa, muhtemelen sadece NoScript eklentisi olacaktır. Sanırım NoScript'in aptallığı hakkında daha fazla kamu eğitimine ihtiyacımız var (AdBlock veya Ghostery gibi aklı başında eklentilerin aksine).
iono

8
Yazar tarafından sağlanan alternatif kodu kullanmanızı öneririm: if (/*@cc_on!@*/false && document.documentMode === 10) {}linting programlarında değerlendirme uyarıları alır.
ajbeaven

62

Internet Explorer 10 artık koşullu yorumları okumaya çalışmaz. Bu, koşullu yorumları tıpkı diğer tarayıcıların yaptığı gibi ele alacağı anlamına gelir: normal HTML yorumları gibi, tamamen göz ardı edilmesi gerekiyordu. Soruda verilen işaretlemeye örnek olarak bakıldığında, IE10 dahil tüm tarayıcılar, gri ile vurgulanan yorum bölümlerini tamamen göz ardı edecektir. HTML5 standardı koşullu yorum sözdiziminden bahsetmez ve bu yüzden IE10'da desteklemeyi bırakmayı seçtiler.

Bununla birlikte, yorumlarda ve daha yeni yanıtlarda gösterildiği gibi JScript'teki koşullu derlemenin hala desteklendiğini unutmayın. Bunun aksinejQuery.browser , son sürümde de gitmiyor . Ve elbette, kullanıcı aracı kokusunun her zamanki gibi kırılgan kaldığını ve hiçbir koşulda asla kullanılmaması gerektiğini söylemeye gerek yok.

IE10'u gerçekten hedeflemeniz gerekiyorsa, yakın gelecekte hala destek görecek koşullu derleme kullanın veya - yardımcı olabilirseniz - tarayıcı algılama yerine (veya bununla birlikte) Modernizr gibi bir özellik algılama kitaplığı kullanın. Kullanım durumunuz sunucu tarafında noscript veya IE10 barındırmayı gerektirmedikçe, kullanıcı-aracı koklaması, uygulanabilir bir seçenekten daha fazla bir baş ağrısı olacaktır.

Sesler oldukça hantal, ama unutmayın ki, bugünün Web standartlarına son derece conformant var modern tarayıcı olarak 1 son derece standartlara uyumlu, sen edilir birlikte çalışabilir kod yazdık varsayarak olmamalı kesinlikle gerekli olmadıkça IE10 için ayrılan özel bir kod ayarlamak zorunda diğer bir deyişle, davranış ve oluşturma açısından diğer tarayıcılara benzemesi gerekir. 2 Ve IE'nin geçmişi göz önüne alındığında çok zor geliyor, ancak Firefox veya Chrome'un kaç kez sadece dehşetle karşılanması için aynı şekilde davranmasını beklediniz?

Eğer varsa yapmak geçerli bir sebep olan tüm araçları size verilen diğer araçlarla onları koklayarak tarafından, belirli tarayıcıları hedeflenirken. Ben sadece bugün böyle bir nedeni bulmak için eskisinden çok daha zorlanacağınızı söylüyorum ve bu gerçekten güvenebileceğiniz bir şey değil.


1 Sadece IE10 değil, aynı zamanda olgun CSS2.1 standardının çoğunu ele alan IE9 ve hatta IE8, Chrome'dan çok daha iyi, çünkü IE8 standart uyumuna bu kadar odaklanmıştı (bu sırada CSS2.1 zaten sadece küçük farklarla oldukça kararlıydı Chrome, en yeni sahte standartların yarı parlak bir teknik demosundan biraz daha fazlası gibi görünüyor.

2 Bunu söylediğimde önyargılı olabilirim, ama cehennemde olduğu gibi. Kodunuz IE'de değil diğer tarayıcılarda çalışıyorsa, IE10 yerine kendi kodunuzla ilgili bir sorun olması, IE'nin önceki sürümleriyle karşılaştırıldığında, örneğin, 3 yıl önce çok daha iyi. Yine, önyargılı olabilirim, ama dürüst olalım: siz de değil misiniz? Sadece yorumlarınıza bakın.


20
Chhhh, evet, IE10 hala webkit ve gecko'nun çok gerisinde. Bazı CSS webkit güzel ve IE10 içinde iğrenç görünümlü var. Stilleri seçici olarak uygulamak için bir yol bulamazsam, bu tarz stilleri terk etmek zorunda kalacağım. :(
trusktr

2
Şu anda bir HTML5 ayrıştırıcıya sahip olduğu için koşullu yorumların IE10'da kaldırıldığına dikkat çekiyor. Koşullu yorumlar HTML5 ayrıştırma algoritmasına göre geçerli değil. Blogs.msdn.com/b/ie/archive/2011/07/06/… 'in
David Storey

3
@trusktr Eğer iyi kodlarsanız, en son tarayıcılarda iyi görünür.
Klevis Miho

10
@KlevisMiho Doğru değil, Chrome ve Firefox iyi kodlanmış olsa bile IE'nin sahip olmadığı özellikleri destekliyor. "Yalnızca ortak özellikleri kullan" demek istiyorsanız, bu "kod kuyusu" ile tam olarak aynı değildir.
trusktr

5
@Dan Mantyla: Bu durumda,<!--[if !IE]><!-->stuff you don't want IE9 and below to see<!--<![endif]-->
BoltClock

36

Başlamak için iyi bir yer IE Standartları Destek Belgeleridir .

JavaScript'te IE10'u nasıl hedefleyeceğiniz aşağıda açıklanmıştır:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

CSS'de IE10'u nasıl hedefleyeceğiniz aşağıda açıklanmıştır:

@media all and (-ms-high-contrast: none) {
...
}

IE11'in CSS yoluyla filtrelenmesi veya sıfırlanması gerekirse, başka bir soruya bakın: IE 11 için bir CSS kesmek nasıl yazılır?


5
CSS çözümünüz IE11'i de etkiliyor: \
Lukasz Lenart

11

Burada yayınlanan her iki çözüm (küçük değişiklikler ile) işe yarar:

<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className='ie10';}</script><!--<![endif]-->

veya

<script>if(Function('/*@cc_on return 10===document.documentMode@*/')()){document.documentElement.className='ie10';}</script>

Yukarıdaki satırlardan birini hss sayfanızın baş etiketinin içine css bağlantınızdan önce eklersiniz. Ve sonra css dosyasında "ie10" sınıfına sahip stillerinizi üst öğe olarak belirlersiniz:

.ie10 .myclass1 { }

Ve voilà! - diğer tarayıcılar olduğu gibi kalır. Ve jQuery'ye ihtiyacınız yok. Nasıl uyguladığımı gösteren örneği burada görebilirsiniz: http://kardash.net .


11

Kullanıcı aracı koklama aksine, sahte 10 olamaz sahte bir şekilde, IE 10 (ve diğer her tarayıcı) tespit özelliği sağlayan Layout Engine adlı küçük bir vanilya JavaScript eklentisi yazdım .

Oluşturma motoru adını html etiketinde bir sınıf olarak ekler ve satıcıyı ve sürümünü (uygun olduğunda) içeren bir JavaScript nesnesi döndürür

Blog gönderime göz atın: http://mattstow.com/layout-engine.html ve GitHub'daki kodu alın: https://github.com/stowball/Layout-Engine


7

Bu komut dosyasını kullanıyorum - eski ama ayrı bir Internet Explorer 10 stil sayfası veya JavaScript dosyasını yalnızca tarayıcı Internet Explorer 10 ise, koşullu yorumlarda yaptığınız gibi hedeflemede etkilidir . Hiçbir jQuery veya başka bir eklenti gerekmez.

<script>
    /*@cc_on
      @if (@_jscript_version == 10)
          document.write(' <link type= "text/css" rel="stylesheet" href="your-ie10-styles.css" />');
      @end
    @*/
</script >

2
Güzel. Bu durumların ne olduğuna dair biraz bilgi ekleyebilir misiniz?
trusktr

6

IE 10 için bir stil sayfası eklemek için PHP'yi kullanabilirsiniz

Sevmek:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10')) {
    <link rel="stylesheet" type="text/css" href="../ie10.css" />
}

2
Stripos büyük / küçük harfe duyarlı olmadığı için ipin üstünü mantıklı kılmaz;)
mgutt

2
Ben her zaman bunun için özendirmek, ama sonra bir cdn / önbellek / proxy ön uç olduğunda kırıldığını unutmayın.
Johan

5

Bunu yapmanız gerekiyorsa, JavaScript'te kullanıcı aracısı dizesini kontrol edebilirsiniz:

var isIE10 = !!navigator.userAgent.match(/MSIE 10/);

Diğer insanların belirttiği gibi, bunun yerine her zaman özellik algılamayı öneriyorum.


`` !! '' ne için?
Francisco Corrales Morales

4
String.match()bir eşleşme için bir dizi döndürürse veya eşleşmezse null değerini döndürür. !(String.match())bir eşleşme için yanlış veya eşleşme olmadan true değerini döndürür. !(!(String.match()))bir eşleşme için doğru, eşleşme için yanlış döndürür. !(!(something))ya da sadece !!somethingherhangi bir şeyi boolean true / false değerine dönüştürür. stackoverflow.com/questions/784929/…
dave1010

@FranciscoCorralesMorales Ah kodum incelenirken kaç kez soruldum. :) dave1010'un harika yorumuna bir genişleme olarak, 'doğruluk' veya 'yanlış' değerlerini içsel bir booleandeğere zorlamak için kullanılabilir , örn var name = 'me', hasName = !!name;.
WynandB

4

IE 10'u Vanilla JavaScript ile hedeflemek istiyorsanız, CSS özellik algılamasını denemek isteyebilirsiniz:

if (document.body.style.msTouchAction != undefined) {
  document.body.className = 'ie10';
}

CSS özellikleri

Bunun yerine, msTouchActionşu anda yalnızca IE 10'da kullanılabildiğinden, bu CSS özelliklerinden birini de kullanabilirsiniz. Ancak bu durum gelecekte değişebilir.

  • msTouchAction
  • msWrapFlow
  • msWrapMargin
  • msWrapThrough
  • msScrollLimit
  • msScrollLimitXMin
  • msScrollLimitYMin
  • msScrollLimitXMax
  • msScrollLimitYMax
  • msFlexbox
  • msFlex
  • msFlexOrder

Test sayfası

Ben CodePen tüm özellikleri ile bir test sayfası koymak .


3

clipBoardData yalnızca IE'de kullanılabilen bir işlevdir, bu nedenle tüm IE sürümlerini hedeflemek istiyorsanız

<script type="text/javascript">
if (window.clipboardData)
            alert("You are using IE!");
</script>

-1: Peki ya sürümler? hangi versiyonun nasıl olduğunu nasıl anlarsınız?
Francisco Corrales Morales

Edge tarayıcısında "window.clipboardData" da yok
AFD

@AFD Bu soru Edge ile değil IE ile ilgilidir.
TylerH

3

IE10 + ve IE9 için CSS

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ styles */
}

@media screen\0 {
    /* IE8,9,10 styles*/
}

1

Tarayıcının IE10 veya daha üstü olup olmadığını görmek için özellik algılamayı kullanabilirsiniz:

var isIE = false;
if (window.navigator.msPointerEnabled) {
    isIE = true;
}

Yalnızca IE9>



1

JavaScript ile:

if (/Trident/g.test(navigator.userAgent)) { // detect trident engine so IE
        document.getElementsByTagName('html')[0].className= 'no-js ie'; }

Tüm IE için çalışın.

IE08 => 'Trident/4.0'

IE09 => 'Trident/5.0'

IE10 => 'Trident/6.0'

IE11 => 'Trident/7.0'

Değişim Yani /Trident/gtarafından /Trident/x.0/gnerede x = 4, 5, 6ya 7(ya da belki 8gelecek için).


1

Sadece IE algılama sürümümü eklemek istedim. Http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ adresinde bulunan bir pasaja dayanır. ve ayrıca IE10 ve ie11 desteklemeye exteded. IE 5 ila 11'i algılar.

Yapmanız gereken tek şey bir yere eklemek ve daha sonra her zaman basit bir koşulla kontrol edebilirsiniz. Genel değişken isIEIE değilse tanımsız olur, aksi takdirde sürüm numarası olur. Böylece kolayca if (isIE && isIE < 10)veya benzer şeyler ekleyebilirsiniz .

var isIe = (function(){
    if (!(window.ActiveXObject) && "ActiveXObject" in window) { return 11; /* IE11 */ }
    if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { return 10; /* IE10  */ }
    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;
}());

0

Benim için aşağıdaki kod iyi çalışıyor, tüm koşullu yorumlar tüm IE sürümlerinde çalışıyor:

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 11)|!(IE)]><!--> <html> <!--<![endif]-->

<script>
    if (document.documentMode===10){
        document.documentElement.className+=' ie10';
    }
    else if (document.documentMode===11){
        document.documentElement.className+=' ie11';
    }
</script>

Windows 8.1'deyim, ie11 güncellemesi ile ilgili olup olmadığından emin değilim ...


1
(gt IE 11)Biraz gereksiz. Bunun <!--[if !(IE)]<!-->yerine sadece yapabilirsiniz .
BoltClock

(Gt IE 11) dışarıda bırakılırsa ve kullanıcının tarayıcısı IE 12 ise (çıktığında) herhangi bir html öğesi tanımlanmaz.
Leonardo Gonzalez

0

Internet Explorer için özel CSS'yi nasıl yapacağım aşağıda açıklanmıştır:

JavaScript dosyamda:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

Ve sonra CSS dosyamda, her farklı stili tanımlar:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}


0

bu kodu js dönüştürmek için babel veya daktilo kullanın

const browser = () => {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3576.0 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.17 Safari/537.36"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0"
    // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
    // "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    // "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
    const _userAgent = navigator.userAgent;
    const br = {
        "Chrome": "Chrome",
        "Edge": "Edge",
        "Firefox": "Firefox",
        ".NET CLR": "Internet Explorer 11",
    };
    const nobr = {
        "MSIE 10.0": "Internet Explorer 10",
        "MSIE 9.0": "Internet Explorer 9",
        "MSIE 8.0": "Internet Explorer 8",
        "MSIE 7.0": "Internet Explorer 7"
    };
    let thisBrow = "Unknown";
    for (const keys in br) {
        if (br.hasOwnProperty(keys)) {
            if (_userAgent.includes(keys)) {

                thisBrow = br[keys];

                for (const key in nobr) {
                    if (_userAgent.includes(key)) {
                        thisBrow = nobr[key];
                    }
                }

            }
        }
    }

    return thisBrow;
};


Merhaba Aliaksandr, fikir için teşekkürler! Birinin neden reddedildiğinden emin değilim, ancak cevap verdim çünkü cevap en azından yararlı bir ipucu. Kim aşağı indirirse, yeni bir kullanıcıya neden yardımcı önerilerde yardımcı olmuyorsunuz?
trusktr

-2

Bu cevap bana yolun% 90'ını getirdi. Cevabımın geri kalanını Microsoft sitesinde burada buldum .

Aşağıdaki kod, tüm yani bir .ie sınıfı ekleyerek hedeflemek için kullandığım şeydir <html>

Kullanım jQuery (1.9+ kullanıcı ajanlar lehine .browser kaldırılmış, bkz http://api.jquery.com/jQuery.browser/ bir .ie sınıf eklemek için):

// ie identifier
$(document).ready(function () {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    $("html").addClass("ie");
  }
});

".browser'ı 1,9'dan fazla kullanıcı aracısı lehine kullanımdan kaldırdı" "Kullanıcı aracıları lehine" demiyor - ne anlama geliyorsa - özellik algılama lehine diyor .
BoltClock

-2

IE10 ve üstü ve IE olmayan tarayıcıların hedeflenmesini önemsemiyorsanız, bu koşullu yorumu kullanabilirsiniz:

<!--[if gt IE 9]><!--> Your code here. <!--<![endif]-->

Http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-ne hiçbirinden türetilmedi


1
Ben -1 vermedi Cevabınız ancak bağlantı biraz outd- görünüyor sekiz -ed. OP'nin yalnızca IE10 ve IE10'u hedeflemeyi amaçladığını da belirtmek gerekir. Ne olursa olsun, kod snippet'iniz IE10 ve üstü veya IE olmayan herhangi bir tarayıcı için çalışmaz, çünkü koşullu yorumlar yalnızca IE5'te IE9'a kadar desteklenir.
WynandB

-2

Gerçekten yapmak zorundaysanız, aşağıdaki satırı ekleyerek koşullu yorumların çalışmasını sağlayabilirsiniz <head>:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

Kaynak


-4

css için modern çözüm

html[data-useragent*='MSIE 10.0'] .any {
  your-style: here;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.