Написание условного кода для Internet Explorer ВНУТРИ файла Javascript - PullRequest
3 голосов
/ 27 июня 2011

Я хотел бы знать, можно ли написать условный JavaScript в файле JavaScript для Internet Explorer.

т.е. как то так ...

if (is IE7) {
    do this } else {
    do this instead
});

Я знаю, что могу загрузить совершенно другой сценарий для IE, используя условные комментарии в голове, но я хочу изменить только небольшой фрагмент кода, поэтому загрузка совершенно другого листа будет «дорогим» способом сделать это.

Ответы [ 7 ]

4 голосов
/ 27 июня 2011

При написании Javascript выполнение обнаружения функции - это всегда путь вместо обнаружения браузера .Поэтому вместо if (IE7) делай if (feature).

Например, если вы хотите узнать, поддерживает ли ваш браузер getElementsByClassName(), вместо проверки версии браузера вы проверяете наличие функции (if (document.getElementsByClassName)).

Пожалуйста, прочитайте эту замечательную статью:

Обнаружение объектов в Quirksmode

Если вы хотите знать, поддерживает ли браузер, который просматривает вашу страницу, определенныеобъекты, которые вы хотите использовать в своем коде, вы никогда не должны использовать обнаружение браузера.Конечно, вы знаете, что этот браузер будет поддерживать ваш код, а браузер - нет.Но как насчет других браузеров, малоизвестных браузеров?

2 голосов
/ 09 июля 2011

Условная компиляция - это именно то, что вы ищете.

<script>
/*@cc_on

  @if (@_jscript_version == 5.7 && window.XMLHttpRequest)
    document.write("You are using IE7");

  @end

@*/
</script>
2 голосов
/ 27 июня 2011

Не в файле JavaScript напрямую.

Несколько альтернатив:

Использование переменной global перед загрузкой скрипта для проверки в вашем файле JavaScript. Это немного гибридный подход и может привести к грязному , но гарантированное обнаружение IE.

<!--[if IE]>
<script type="text/javascript">
  var is_ie = true;
</script>
<![endif]-->
<script type="text/javascript" src="somefile.js"></script>

Или более традиционный подход с использованием браузера или обнаружение объекта в файле JavaScript.

1 голос
/ 27 июня 2011

Мой сценарий перехода для этого - сценарий BrowserDetect ППК . Он легкий, легко понятный и не требует использования библиотеки. Когда он загружен, вы можете написать код:

if (BrowserDetect.browser == "Explorer" && BrowserDetect.version >= 6 && BrowserDetect.version <= 8) {
    // IE6-8 code
{

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

1 голос
/ 27 июня 2011

Несмотря на то, что это ответ на первоначальный вопрос, это НЕ то, что вам следует делать.Так что не делайте этого!

Почему бы не выяснить, какой браузер вы используете, и сохранить его в переменной в javascript.Тогда вы можете иметь, если Statemenets и тому подобное в вашем JavaScript.Например, если я IE, то сделайте это, иначе сделайте это.Вы поняли!

Вы видели это? Обнаружение браузера

Значимый бит:

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}
0 голосов
/ 27 июня 2011

Если вы хотите использовать jquery, он имеет встроенный браузер обнаружения.

http://api.jquery.com/jQuery.browser/

0 голосов
/ 27 июня 2011

Если вы используете JQuery, вы делаете код

if ($.browser.msie && $.browser.version == '6.0') {
     //do IE specific code
}
...