yes javascript internet-explorer browser-detection

javascript - yes - Bloqueando IE moderno?



javascript confirm submit (3)

Bloquear IE definitivamente no es la mejor práctica, pero es algo en mis requisitos para una aplicación existente. ¿Cuál es la forma más efectiva de hacerlo ya que los comentarios condicionales no están disponibles en IE 10? Para IE 9 y abajo, esto funcionará:

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

Suponiendo que hay una solución de JavaScript de mejores prácticas, ¿qué problemas puedo encontrar? Me pregunto si podría haber problemas alrededor de lo siguiente:

  • Orden de los eventos de disparo
  • iframe elementos que están más allá de mi control
  • Precedencia de una solución JS en el contexto de otras etiquetas <script>
  • Scripts cargados a través de document.write(''<script type="text/javascript" src="foo.js"></script>''); método.

Tengo la sensación de que mucha gente podría verse obligada a gritar "use Modernizr" y "¿Estás loco, no pongas scripts en el DOM de esa manera"? Desafortunadamente, la aplicación es grande y algunas mejoras están fuera del alcance en este momento.


Tu cliente está loco. Pero si están pagando para hacer esto, entonces ... meh, lo que sea.

Si está utilizando jQuery, proporciona una función de detección de navegador. Está en desuso, por lo que es posible que desee evitar el uso de las últimas versiones, pero funciona:

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

Si no está utilizando jQuery, o si prefiere no usar las características en desuso, puede hacerlo de la siguiente manera:

  • Analizando la cadena del agente de usuario:

    if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }

  • Uso de comentarios condicionales de Javascript (que creo que todavía son compatibles):

    if(Function(''/*@cc_on return document.documentMode > 0@*/'')()){ .... do crazy stuff .... }

Espero que ayude.


para referencia futura aquí están todas las detecciones para, por ejemplo, en 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 } } }


Bueno, IE es el único navegador que admite el lado del cliente VBScript.

Así que solo agregue esto a sus páginas: (excepto en IEblocked.html sí mismo por supuesto)

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

Sé de hecho que está funcionando en IE9 y abajo. Este comentario prueba que todavía funciona bien en IE10 y en cuanto al futuro me encontré con esta publicación de blog de Eric Lippert: Los rumores sobre la muerte de VBScript han sido muy exagerados y contienen el siguiente párrafo:

Continuaremos respaldando VBScript y JScript en el futuro previsible . Obviamente, VBScript, JScript, WSH, etc., deben continuar enviándose con el sistema operativo para siempre, ya que grandes cantidades de códigos críticos para empresas existentes dependen de ellos. Caracterizar eso como "morir una muerte lenta" es excesivamente melodramático. Esperamos que los lenguajes de script COM no administrados continúen siendo útiles por muchos, muchos años. El equipo de ingeniería de Visual Studio Sustaining es actualmente responsable de VBScript, JScript, Windows Script Components, Windows Script Host, etc.

Aunque publiqué hace más de 8 años, creo firmemente que todavía tenemos largos años de existencia de VBScript en el núcleo de Windows, y las versiones futuras de Internet Explorer seguirán usándolo.

Para resumir, contacté a Eric directamente y me pregunté "¿Cuánto tiempo se admitirá VBScript, como idioma del lado del cliente, en las versiones de Internet Explorer?". En respuesta, dijo:

Todavía hay muchos clientes corporativos que dependen de VBScript en el navegador, por lo que sería tonto dejar caer soporte para ello. Es muy barato de mantener, y perder la buena voluntad de incluso un pequeño número de clientes es costoso.

Ya no trabaja en Microsoft, por lo que su respuesta no es oficial, pero es lo más cercano que puedo obtener y no la publicación de blog de años anteriores, sino directamente de la fuente. Considerando todo, puedo concluir que el uso del código anterior funcionará durante muchos años más. :)