Блокировка современного IE? - программирование

Блокировка современного IE?

Блокировка IE определенно не самая лучшая практика, но это что-то в моих требованиях для существующего приложения. Какой самый эффективный способ сделать это с условные комментарии недоступны в IE 10? Для IE 9 и ниже это будет работать:

<!--[if IE]>
<script type="text/javascript">
window.location = "/IEblocked.html";
</script>
<![endif]-->

Предполагая, что решение для JavaScript на основе передовой практики, какие ошибки можно найти? Мне интересно, могут ли быть проблемы вокруг следующего:

  • Порядок срабатывания событий
  • iframe элементы, находящиеся вне моего контроля
  • Приоритет решения JS в контексте других тегов <script>
  • Скрипты, загруженные с помощью метода document.write('<script type="text/javascript" src="foo.js"></script>');.

У меня такое чувство, что многие люди могут быть вынуждены выкрикивать "использовать Modernizr" и "Are you crazy, не ставьте скрипты в DOM таким образом!", к сожалению, приложение велико, а некоторые улучшения находятся вне область действия на данный момент.

4b9b3361

Ответ 1

Ну, IE - единственный браузер, поддерживающий VBScript на стороне клиента.

Поэтому просто добавьте это на свои страницы: (за исключением самого IEblocked.html)

<script type="text/vbscript">
Document.Location = "IEblocked.html"
</script>

Я знаю, что он работает в IE9 и ниже. Этот комментарий в значительной степени доказывает, что он все еще отлично работает в IE10, и что касается будущего, я наткнулся на это сообщение в блоге Эрика Липперта: Слухи о смерти VBScript сильно преувеличены, который содержит следующий абзац:

Мы будем продолжать поддерживать VBScript и JScript в обозримом будущем. Очевидно, что VBScript, JScript, WSH и т.д. Должны продолжать поставляться с операционной системой навсегда, поскольку от них зависит огромное количество существующего критически важного для бизнеса кода. Охарактеризовать это как "умирающую медленную смерть", чрезмерно мелодраматично. Мы ожидаем, что неуправляемые языки сценариев COM будут по-прежнему полезны на протяжении многих-многих лет. Команда Visual Studio Sustaining Engineering в настоящее время отвечает за VBScript, JScript, Windows Script Компоненты, Windows Script Host и т.д.

Несмотря на то, что опубликовано более 8 лет назад, я твердо верю, что у нас все еще есть долгие годы существования VBScript в ядре Windows, и будущие версии Internet Explorer будут продолжать использовать его.

Чтобы подвести итог, я связался с Эриком напрямую и спросил: "Как долго будет поддерживаться VBScript, как язык на стороне клиента, в версиях Internet Explorer?". В ответ он сказал:

Есть еще много корпоративных клиентов, которые зависят от VBScript в браузере, поэтому MSFT было бы глупо отказаться от поддержки для него. Очень дешево поддерживать, и потерять хорошую волю даже небольшого числа клиентов дорого.

Он больше не работает в Microsoft, поэтому его ответ не является официальным, но это самое близкое, что я могу получить, а не старое сообщение в блоге, но прямо из источника. С учетом всех обстоятельств я могу заключить, что использование вышеуказанного кода будет работать еще много лет.:)

Ответ 2

Ваш клиент орехи. Но если они платят за это, тогда... meh, что угодно.

Если вы используете jQuery, он обеспечивает функцию обнаружения браузера. Он устарел, поэтому вы можете избежать использования последних версий, но он работает:

if ($.browser.msie) { ....do crazy stuff here.... }

Если вы не используете jQuery или не хотите использовать устаревшие функции, вы можете сделать это:

  • Разбор строки User Agent:

    if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }
    
  • Использование условных комментариев Javascript (которые, я считаю, по-прежнему поддерживаются):

    if(Function('/*@cc_on return document.documentMode > [email protected]*/')()){ .... do crazy stuff .... }
    

Надеюсь, что это поможет.

Ответ 3

для дальнейшего использования здесь все обнаружения для ie в javascript

<script type="text/javascript">

// if I am opera I need to not enter this function
if (!!(window.opera && window.opera.version)) {
    // ok now am I IE (opera is the only other browser that will do this
    if (document.all) {
        // Now lets look at the versions, use the ones you want

        // ie 5
        if (!(document.compatMode != undefined)) {
            // do ie 5 thing
        }
        else if ((document.compatMode != undefined) && (window.XMLHttpRequest == undefined)) {
            // do ie 6 thing
        }
        else if ((document.XMLHttpRequest != undefined) && (document.querySelector == undefined)) {
            // do ie 7 thing
        }
        else if ((document.querySelector != undefined) && (document.addEventListener == undefined)) {
            // do ie 8 thing
        }
        else if ((document.addEventListener != undefined) && (window.atob == undefined)) {
            // do ie 9 thing
        }
        else if (window.atob) {
            // do ie 10+ thing
        }
        else {
            // do ie 4 thing
        }
    }
}