условие if: если браузер IE и версия браузера IE старше 9 лет - PullRequest
11 голосов
/ 19 ноября 2010

Условие if ниже, я думаю, говорит: если браузер IE, а версия браузера IE новее, чем 9, но у меня нет IE 9, чтобы проверить его, поэтому трудно узнать правильный вывод, также это не 100% того, что я хочу, потому что этот скрипт должен запускаться и в других браузерах по умолчанию, таких как Chrome, Firefox и т. д. - возможно ли установить его в условие if?

if ($.browser.msie && parseInt($.browser.version) > 9) 
{
  // run this code
}

Причина, по которой я хочу использовать условие, заключается в том, что сценарий, по-видимому, имеет ошибку в IE 7, и, конечно, лучше всего исправить сценарий, но я не могу сказать, какая часть сценария IE не принимает (все остальные браузеры работают отлично!). Знаете ли вы какой-либо инструмент, который я могу использовать для отладки скрипта для IE 6, 7, 8 и т. Д.? Я использую notepad ++ для написания jquery и т. Д., Поэтому он не предоставляет никаких отладочных материалов ...

Итак, мое следующее лучшее решение - не запускать этот скрипт, если браузер IE старше 9.

Кстати, это сообщение об ошибке в браузере IE7, но я никогда не могу понять это!

Line:910  //which line?
Char:4   // what the hell is this?
Error: Object doesn't support this property or method //what?
Code: 0    // 0 of what?
URL: http://localhost/mysite/page-1 // so which file is causing the error then? the .js or .html or something else??

кровавый IE!

спасибо.

Ответы [ 9 ]

12 голосов
/ 19 ноября 2010

Ваш код выглядит нормально, но вы забыли установить параметр radix в parseInt:

if ($.browser.msie && parseInt($.browser.version, 10) > 9){

  // you need to wait a couple years to test if it works...
  alert("I'm IE10 or 11...");

}

Это не может вызвать каких-либо ошибок

10 голосов
/ 19 ноября 2010

Во-первых, вы можете получить предварительный просмотр IE9, загрузив его с сайта Microsoft: http://ie.microsoft.com/testdrive/

Во-вторых, parseInt($.browser.version) > 9 предположительно проверит, что версия больше 9, чего, конечно, не будет, пока не будет выпущена версия v10. (Вы, возможно, намеревались >= («больше или равно»)?

Я обычно советую людям избегать обнаружения браузера или кода, специфичного для браузера. Есть моменты, когда это необходимо, но они довольно редки. Большую часть времени разработчик будет лучше обслуживать, зная, что не работает, и обходя его (такие инструменты, как Modernizr действительно помогают в этом).

Однако бывают случаи, когда нужно просто обнаружить браузер.

В вашем случае, если вам действительно нужно обнаружить IE, не делайте это так, как вы (т.е. проверяете версию 9); было бы лучше проверить более старые версии, и я бы предположил, что условный комментарий будет лучшим способом сделать это.

<script>
var i_am_old_ie = false;
<!--[if LT IE  9]>
i_am_old_ie = true;
<![endif]-->
</script>

Тогда ваше if() утверждение позже может выглядеть так:

if(i_am_old_ie) {
   //do stuff for IE6/7/8
} else {
   //do stuff for all other browsers (including IE9)
}
8 голосов
/ 07 мая 2012

Вот версия Javascript для проверки, является ли браузер IE:

<script>

    function getIEVersion() {
        var rv = -1; // Return value assumes failure.
        if (navigator.appName == 'Microsoft Internet Explorer') {
            var ua = navigator.userAgent;
            var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            if (re.test(ua) != null)
                rv = parseFloat( RegExp.$1 );
        }
        return rv;
    }


    function checkVersion() {
        var ver = getIEVersion();

        if ( ver != -1 ) {
            if (ver <= 9.0) {
                // do something
            }
        }
    }

    checkVersion();

</script>

Этот метод полезен в случае, если вы используете специальные модули HTML5 и хотите реализовать некоторые резервные функции, если браузер не поддерживаетэти функции, например.<canvas>

7 голосов
/ 29 октября 2011

Есть еще более простой способ.

Поскольку это комментарий, он будет игнорироваться всеми другими браузерами, кроме IE.

var IE;
//@cc_on IE = navigator.appVersion;

Затем просто используйте это в своем скрипте, чтобы обнаружить все версии IE.

if (IE) {
//This is IE.
}
else {
//This is NOT IE.
}

Или сопоставить с любой версией, подобной этой:

if (IE <= 6) {}, if (IE < 9) }, if (IE == 7) {} etc etc...

Вот источник, где я нашел эти типы условных выражений: http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

2 голосов
/ 18 июня 2014

Вместо того, чтобы вставлять кучу встроенного javascript, вы можете просто добавить пустой div для версии, т.е. на которую вы нацеливаетесь, поэтому поместите следующее в верхней части html, прямо внутри тега body:

<!--[if LT IE  9]>
    <div id="iedetect" class="oldie"></div>
<![endif]-->

Затем вы можете поместить оператор if в свой jquery для проверки этого блока.

if ($("#iedetect").is(".oldie")) {
    //Do something
} else {
   //Do Something else in all other browsers
}
1 голос
/ 12 августа 2014

или вы могли бы сделать это

<!--[if IE 9]>
  <script type="text/javascript">
    // this is only executed for IE 9
  </script>
<![endif]-->
1 голос
/ 12 августа 2014
<!--[if IE 8]>
  <script type="text/javascript">
    // this is only executed for IE 8
  </script>
<![endif]-->
1 голос
/ 20 мая 2014

Я обнаружил, что каскадирование прекрасно работает для обнаружения нескольких браузеров.Этот код использовался для смены фейдера на отображение / скрытие, т.е. 8 7 6.

$(document).ready(function(){
    if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 8.0)
         { 
             $(".glow").hide();
            $('#shop').hover(function() {
        $(".glow").show();
    }, function() {
        $(".glow").hide();
    });
         }
         else
         { if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 7.0)
         { 
             $(".glow").hide();
            $('#shop').hover(function() {
        $(".glow").show();
    }, function() {
        $(".glow").hide();
    });
         }
         else
         {if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 6.0)
         { 
             $(".glow").hide();
            $('#shop').hover(function() {
        $(".glow").show();
    }, function() {
        $(".glow").hide();
    });
         }
         else
         { $('#shop').hover(function() {
        $(".glow").stop(true).fadeTo("400ms", 1);
    }, function() {
        $(".glow").stop(true).fadeTo("400ms", 0.2);});
         }
         }
         }
       });
1 голос
/ 19 ноября 2010
<!--[if (IE 9)|!(IE)]><!--> Script here <!--<![endif]-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...