validar validacion vacios formularios formulario enviar ejemplos ejemplo con campos antes javascript internet-explorer user-agent browser-detection

validacion - validar formulario javascript html5



Detectar la versiĆ³n de IE(antes de v9) en JavaScript (30)

Detección de la versión de IE mediante la detección de características (IE6 +, los navegadores anteriores a IE6 se detectan como 6, devuelve nulo para los navegadores que no son de IE):

var ie = (function (){ if (window.ActiveXObject === undefined) return null; //Not IE if (!window.XMLHttpRequest) return 6; if (!document.querySelector) return 7; if (!document.addEventListener) return 8; if (!window.atob) return 9; if (!document.__proto__) return 10; return 11; })();

Edición: he creado un repositorio de bower / npm para su comodidad: ie-version

Actualizar:

una versión más compacta se puede escribir en una línea como:

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

Quiero enviar a los usuarios de nuestro sitio web a una página de error si están usando una versión de Internet Explorer antes de v9. Simplemente no vale la pena nuestro tiempo y dinero para apoyar IE pre-v9 . Los usuarios de todos los demás navegadores que no son IE están bien y no deben ser rechazados. Aquí está el código propuesto:

if(navigator.appName.indexOf("Internet Explorer")!=-1){ //yeah, he''s using IE var badBrowser=( navigator.appVersion.indexOf("MSIE 9")==-1 && //v9 is ok navigator.appVersion.indexOf("MSIE 1")==-1 //v10, 11, 12, etc. is fine too ); if(badBrowser){ // navigate to error page } }

¿Este código hará el truco?

Para evitar algunos comentarios que probablemente vendrán en mi camino:

  1. Sí, sé que los usuarios pueden falsificar su cadena de useragent . No estoy preocupado
  2. Sí, sé que los profesionales de la programación prefieren oler el soporte de funciones en lugar del tipo de navegador, pero no creo que este enfoque tenga sentido en este caso. Ya sé que todos los navegadores que no son de IE (relevantes) son compatibles con las funciones que necesito y que no todos pre-v9 IE navegadores de pre-v9 IE . Comprobación de características por características en todo el sitio sería un desperdicio.
  3. Sí, sé que alguien que intenta acceder al sitio utilizando IE v1 (o> = 20) no se configurará como "badBrowser" y la página de advertencia no se mostrará correctamente. Ese es un riesgo que estamos dispuestos a asumir.
  4. Sí, sé que Microsoft tiene "comentarios condicionales" que pueden usarse para la detección precisa de la versión del navegador. IE ya no admite comentarios condicionales a partir de IE 10 , lo que hace que este enfoque sea absolutamente inútil.

¿Alguna otra cuestión obvia a tener en cuenta?


Detectar IE y sus versiones no podría ser más fácil, y todo lo que necesita es un poco de Javascript nativo / vainilla:

var uA = navigator.userAgent; var browser = null; var ieVersion = null; if (uA.indexOf(''MSIE 6'') >= 0) { browser = ''IE''; ieVersion = 6; } if (uA.indexOf(''MSIE 7'') >= 0) { browser = ''IE''; ieVersion = 7; } if (document.documentMode) { // as of IE8 browser = ''IE''; ieVersion = document.documentMode; }

Y esta es una forma de usarlo:

if (browser == ''IE'' && ieVersion <= 9) document.documentElement.className += '' ie9-'';

.

Funciona en todas las versiones de IE, incluidas las versiones superiores en la Vista / Modo de compatibilidad inferior, y documentMode es propiedad de IE.


Devuelve la versión de IE o si no es IE devuelve falso

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

Ejemplo:

if (isIE () == 8) { // IE8 code } else { // Other versions IE or not IE }

o

if (isIE () && isIE () < 9) { // is IE version less than 9 } else { // is IE 9 and later or not IE }

o

if (isIE()) { // is IE } else { // Other browser }


El script JS más completo que encontré para verificar las versiones de IE es http://www.pinlady.net/PluginDetect/IE/ . La biblioteca completa está en http://www.pinlady.net/PluginDetect/Browsers/ .

Con IE10, las declaraciones condicionales ya no son compatibles.

Con IE11, el agente de usuario ya no contiene MSIE. Además, usar el agente de usuario no es confiable porque se puede modificar.

Usando el script PluginDetect JS, puede detectar IE y detectar las versiones exactas utilizando un código muy específico y bien diseñado que apunta a versiones específicas de IE. Esto es muy útil cuando le importa exactamente con qué versión de navegador está trabajando.


Esta es la forma en que AngularJS checks si hay IE

/** * documentMode is an IE-only property * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx */ var msie = document.documentMode; if (msie < 9) { // code for IE < 9 }


Esta es mi forma preferida de hacerlo. Da el máximo control. (Nota: las sentencias condicionales solo se admiten en IE5 - 9).

Primero configura tus clases de ie correctamente

<!DOCTYPE html> <!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html> <!--<![endif]--> <head>

Luego, solo puede usar CSS para hacer excepciones de estilo o, si lo requiere, puede agregar algunos JavaScript simples:

(function ($) { "use strict"; // Detecting IE var oldIE; if ($(''html'').is(''.lt-ie7, .lt-ie8, .lt-ie9'')) { oldIE = true; } if (oldIE) { // Here''s your JS for IE.. } else { // ..And here''s the full-fat code for everyone else } }(jQuery));

Gracias a Paul Irish .


Esta función devolverá el número de versión principal de IE como un entero, o undefined si el navegador no es Internet Explorer. Esto, como todas las soluciones de agente de usuario, es compatible con la suplantación de agente de usuario (que ha sido una característica oficial de IE desde la versión 8).

function getIEVersion() { var match = navigator.userAgent.match(/(?:MSIE |Trident//.*; rv:)(/d+)/); return match ? parseInt(match[1]) : undefined; }


Este enfoque para detectar IE combina las fortalezas y evita las debilidades de la respuesta de jKey utilizando comentarios condicionales y la respuesta de Owen utilizando agentes de usuario.

  • El enfoque de jKey funciona hasta la versión 9 y es inmune a la falsificación de agentes de usuario en IE 8 y 9.
  • El enfoque de Owen puede fallar en IE 5 y 6 (informe 7) y es susceptible a falsificación de UA, pero puede detectar versiones de IE> = 10 (ahora también incluye 12, que son posteriores a la respuesta de Owen).

    // ---------------------------------------------------------- // A short snippet for detecting versions of IE // ---------------------------------------------------------- // If you''re not in IE (or IE version is less than 5) then: // ie === undefined // Thus, to detect IE: // if (ie) {} // And to detect the version: // ie === 6 // IE6 // ie > 7 // IE8, IE9 ... // ---------------------------------------------------------- var ie = (function(){ var v = 3, div = document.createElement(''div''), all = div.getElementsByTagName(''i''); while ( div.innerHTML = ''<!--[if gt IE '' + (++v) + '']><i></i><![endif]-->'', all[0] ); if (v <= 4) { // Check for IE>9 using user agent var match = navigator.userAgent.match(/(?:MSIE |Trident//.*; rv:|Edge//)(/d+)/); v = match ? parseInt(match[1]) : undefined; } return v; }());

Esto se puede usar para establecer clases útiles para su documento que contiene la versión de IE:

if (ie) { document.documentElement.className += '' ie'' + ie; if (ie < 9) document.documentElement.className += '' ieLT9''; }

Tenga en cuenta que detecta el modo de compatibilidad que se está utilizando, si IE está en modo de compatibilidad. También tenga en cuenta que la versión de IE es útil sobre todo para versiones anteriores (<10); las versiones superiores son más compatibles con los estándares y es mejor que compruebes las funciones que utilizan algo como modernizr.js.


Esto funciona para mi Lo uso como una redirección a una página que explica por qué no nos gusta <IE9 y proporcionamos enlaces a los navegadores que preferimos.

<!--[if lt IE 9]> <meta http-equiv="refresh" content="0;URL=http://google.com"> <![endif]-->


Esto ha sido respondido a muerte, pero esto es todo lo que necesitas.

!!navigator.userAgent.match(/msie/s[5-8]/i)


Hice una mezcla de subrayado conveniente para esto.

_.isIE(); // Any version of IE? _.isIE(9); // IE 9? _.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({ isIE: function(mixed) { if (_.isUndefined(mixed)) { mixed = [7, 8, 9, 10, 11]; } else if (_.isNumber(mixed)) { mixed = [mixed]; } for (var j = 0; j < mixed.length; j++) { var re; switch (mixed[j]) { case 11: re = /Trident.*rv/:11/./g; break; case 10: re = /MSIE/s10/./g; break; case 9: re = /MSIE/s9/./g; break; case 8: re = /MSIE/s8/./g; break; case 7: re = /MSIE/s7/./g; break; } if (!!window.navigator.userAgent.match(re)) { return true; } } return false; } }); console.log(_.isIE()); console.log(_.isIE([7, 8, 9])); console.log(_.isIE(11));

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


La ventana que ejecuta IE10 se actualizará automáticamente a IE11 + y se estandarizará W3C

Ahora, no necesitamos apoyar IE8-

<!DOCTYPE html> <!--[if lt IE 9]><html class="ie ie8"><![endif]--> <!--[if IE 9]><html class="ie ie9"><![endif]--> <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]--> <head> ... <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]-- ... </head>


Los comentarios condicionales ya no se admiten en IE a partir de la Versión 10 como se indica en la página de referencia de Microsoft .

var ieDetector = function() { var browser = { // browser object verIE: null, docModeIE: null, verIEtrue: null, verIE_ua: null }, tmp; tmp = document.documentMode; try { document.documentMode = ""; } catch (e) {}; browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1"); try { document.documentMode = tmp; } catch (e) {}; // We only let IE run this code. if (browser.isIE) { browser.verIE_ua = (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv/s*/:)/s*(/d+/.?/d*)/i).test(navigator.userAgent || "") ? parseFloat(RegExp.$1, 10) : null; var e, verTrueFloat, x, obj = document.createElement("div"), CLASSID = [ "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack "{89820200-ECBD-11CF-8B85-00AA005B4383}" ]; try { obj.style.behavior = "url(#default#clientcaps)" } catch (e) {}; for (x = 0; x < CLASSID.length; x++) { try { browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, "."); } catch (e) {}; if (browser.verIEtrue) break; }; verTrueFloat = parseFloat(browser.verIEtrue || "0", 10); browser.docModeIE = document.documentMode || ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) || browser.verIE_ua; browser.verIE = verTrueFloat || browser.docModeIE; }; return { isIE: browser.isIE, Version: browser.verIE }; }(); document.write(''isIE: '' + ieDetector.isIE + "<br />"); document.write(''IE Version Number: '' + ieDetector.Version);

entonces use:

if((ieDetector.isIE) && (ieDetector.Version <= 9)) { }


Me doy cuenta de que llego un poco tarde a la fiesta aquí, pero había estado revisando una forma sencilla de una línea para proporcionar comentarios sobre si un navegador es IE y qué versión de la versión 10 era. No he codificado esto para la versión 11, así que quizás se necesite una pequeña enmienda para eso.

Sin embargo, este es el código, funciona como un objeto que tiene una propiedad y un método y se basa en la detección de objetos en lugar de raspar el objeto del navegador (que tiene fallas masivas, ya que puede ser falsificado).

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

El uso es isIE.browser una propiedad que devuelve un valor booleano y se basa en comentarios condicionales. El método isIE.detectedVersion() que devuelve un número entre 5 y 10. Supongo que cualquier cosa inferior a 6 y que estás en la vieja escuela seria territorio y tendrás algo más robusto que un forro y algo más alto que 10 y estás en un nuevo territorio. He leído algo acerca de que IE11 no admite comentarios condicionales, pero no lo he investigado por completo, tal vez para una fecha posterior.

De todos modos, tal como está, y para una sola línea, cubrirá los aspectos básicos del navegador IE y la detección de versiones. Está lejos de ser perfecto, pero es pequeño y fácil de modificar.

Solo como referencia, y si alguien tiene alguna duda sobre cómo implementar esto, el siguiente condicional debería ayudar.

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } }; /* testing IE */ if (isIE.browser) { alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion()); }


Me gusta eso

<script> function isIE () { var myNav = navigator.userAgent.toLowerCase(); return (myNav.indexOf(''msie'') != -1) ? parseInt(myNav.split(''msie'')[1]) : false; } var ua = window.navigator.userAgent; //Internet Explorer | if | 9-11 if (isIE () == 9) { alert("Shut down this junk! | IE 9"); } else if (isIE () == 10){ alert("Shut down this junk! | IE 10"); } else if (ua.indexOf("Trident/7.0") > 0) { alert("Shut down this junk! | IE 11"); }else{ alert("Thank god it''s not IE!"); } </script>


Para detectar Internet Explorer 10 | 11 puede usar este pequeño script inmediatamente después de la etiqueta del cuerpo:

En mi caso yo uso la biblioteca jQuery cargada en la cabeza.

<!DOCTYPE HTML> <html> <head> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> </head> <body> <script>if (navigator.appVersion.indexOf(''Trident/'') != -1) $("body").addClass("ie10");</script> </body> </html>


Para detectar MSIE (v6 - v7 - v8 - v9 - v10 - v11) fácilmente:

if (navigator.userAgent.indexOf(''MSIE'') !== -1 || navigator.appVersion.indexOf(''Trident/'') > 0) { // MSIE }


Para filtrar de forma fiable IE8 y versiones anteriores, se puede utilizar la comprobación de objetos globales :

if (document.all && !document.addEventListener) { alert(''IE8 or lower''); }


Para ie 10 y 11:

Puede usar js y agregar una clase en html para mantener el estándar de comentarios condicionales :

var ua = navigator.userAgent, doc = document.documentElement; if ((ua.match(/MSIE 10.0/i))) { doc.className = doc.className + " ie10"; } else if((ua.match(/rv:11.0/i))){ doc.className = doc.className + " ie11"; }

O use un lib como bowser:

https://github.com/ded/bowser

O modernizr para la detección de características:

http://modernizr.com/


Según Microsoft , la siguiente es la mejor solución, también es muy simple:

function getInternetExplorerVersion() // Returns the version of Internet Explorer or a -1 // (indicating the use of another browser). { 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.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } return rv; } function checkVersion() { var msg = "You''re not using Internet Explorer."; var ver = getInternetExplorerVersion(); if ( ver > -1 ) { if ( ver >= 8.0 ) msg = "You''re using a recent copy of Internet Explorer." else msg = "You should upgrade your copy of Internet Explorer."; } alert( msg ); }


Si nadie más ha agregado un método addEventLister y está usando el modo de navegador correcto, entonces puede verificar IE 8 o menos con

if (window.attachEvent && !window.addEventListener) { // "bad" IE }

Internet Explorer heredado y attachEvent (MDN)


Su código puede hacer la verificación, pero como pensó, si alguien intenta acceder a su página usando IE v1 o> v19 no obtendrá el error, por lo que podría ser más seguro realizar la verificación con expresiones Regex como este código a continuación:

var userAgent = navigator.userAgent.toLowerCase(); // Test if the browser is IE and check the version number is lower than 9 if (/msie/.test(userAgent) && parseFloat((userAgent.match(/.*(?:rv|ie)[//: ](.+?)([ /);]|$)/) || [])[1]) < 9) { // Navigate to error page }


Usa comentarios condicionales. Está intentando detectar usuarios de IE <9 y los comentarios condicionales funcionarán en esos navegadores; en otros navegadores (IE> = 10 y no IE), los comentarios se tratarán como comentarios HTML normales, que es lo que son.

Ejemplo HTML:

<!--[if lt IE 9]> WE DON''T LIKE YOUR BROWSER <![endif]-->

También puede hacer esto únicamente con script, si necesita:

var div = document.createElement("div"); div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->"; var isIeLessThan9 = (div.getElementsByTagName("i").length == 1); if (isIeLessThan9) { alert("WE DON''T LIKE YOUR BROWSER"); }


Voy a recomendar no volver a escribir este código por enésima vez. Le recomendaría que utilice la biblioteca Conditionizr ( http://conditionizr.com/ ) que es capaz de probar versiones específicas de IE, así como otros navegadores, sistemas operativos e incluso la presencia o ausencia de pantallas Retina.

Incluya el código solo para las pruebas específicas que necesita y también obtendrá el beneficio de una biblioteca probada que ha pasado por muchas iteraciones (y que sería fácil de actualizar sin romper su código).

También combina perfectamente con Modernizr, que puede manejar todos aquellos casos en los que es mejor probar una capacidad específica en lugar de un navegador específico.


o simplemente

// IE 10: ua = ''Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)''; // IE 11: ua = ''Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko''; // Edge 12: ua = ''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0''; // Edge 13: ua = ''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586''; var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/) var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge//)(/d+(/./d+)?)/)) || []) [1]


Detecta IE en JS usando comentarios condicionales.

// ---------------------------------------------------------- // A short snippet for detecting versions of IE in JavaScript // without resorting to user-agent sniffing // ---------------------------------------------------------- // If you''re not in IE (or IE version is less than 5) then: // ie === undefined // If you''re in IE (>=5) then you can determine which version: // ie === 7; // IE7 // Thus, to detect IE: // if (ie) {} // And to detect the version: // ie === 6 // IE6 // ie > 7 // IE8, IE9 ... // ie < 9 // Anything less than IE9 // ---------------------------------------------------------- // UPDATE: Now using Live NodeList idea from @jdalton var ie = (function(){ 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; }());


Si necesita eliminar la versión del navegador de IE, puede seguir el código a continuación. Este código funciona bien para la versión IE6 a IE11

<!DOCTYPE html> <html> <body> <p>Click on Try button to check IE Browser version.</p> <button onclick="getInternetExplorerVersion()">Try it</button> <p id="demo"></p> <script> function getInternetExplorerVersion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); var rv = -1; if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv/:11/./)) // If Internet Explorer, return version number { if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) { //For IE 11 > if (navigator.appName == ''Netscape'') { var ua = navigator.userAgent; var re = new RegExp("Trident/.*rv:([0-9]{1,}[/.0-9]{0,})"); if (re.exec(ua) != null) { rv = parseFloat(RegExp.$1); alert(rv); } } else { alert(''otherbrowser''); } } else { //For < IE11 alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } return false; }} </script> </body> </html>


if (!document.addEventListener) { // ie8 } else if (!window.btoa) { // ie9 } // others


var Browser = new function () { var self = this; var nav = navigator.userAgent.toLowerCase(); if (nav.indexOf(''msie'') != -1) { self.ie = { version: toFloat(nav.split(''msie'')[1]) }; }; }; if(Browser.ie && Browser.ie.version > 9) { // do something }


var isIE9OrBelow = function() { return /MSIE/s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10; }