Mostrando las entradas con la etiqueta IE. Mostrar todas las entradas
Mostrando las entradas con la etiqueta IE. Mostrar todas las entradas

domingo, 22 de mayo de 2011

element.getAttribute("class") y element.setAttribute("class", "nuevaClase")

Hace mucho tiempo no me encontraba con el problema que tiene Internet Explorer con el atributo class.
Según el estándar DOM, por medio de javascript podemos obtener la clase de un elemento con esta línea:
clase = element.getAttribute("class");
Y cambiarla, con la siguiente:
element.setAttribute("class", "nuevaClase")
Pero como a Internet Explorer no le importan los estándares, esos comandos no tienen utilidad en ese "navegador". Hay varias formas de resolver el problemita, pero la más sencilla es no usar los comandos anteriores (los que son del estándar), si no los siguientes:
clase = element.className;
element.className = "nuevaClase";
De esta forma funciona en todos los navegadores.
La razón por la que esto funciona es porque se está accediendo a la propiedad del elemento directamente y no al atributo que es la manera sugerida.

viernes, 5 de junio de 2009

Control de cache en conexiones seguras

Hace poco me salía el siguiente error cuando descargaba un archivo por medio de un servlet desde un sitio seguro a través de Internet Explorer.



Extrañamente, en Firefox este error no se presentaba.
Después de buscar un rato (creo que fue más de un rato) a qué se debía el error, encontré que el problema parece ser un bug de IE (que raro!) y se genera por el uso de una etiqueta que había puesto en el encabezado de la respuesta. La etiqueta que yo tenía es:

Pragma: null

Internet Explorer tiene problemas con este encabezado cuando el sitio es seguro. La solución fue demasiado sencilla, eliminar la etiqueta en cuestión y utilizar la siguiente:

Cache-Control: private

En mi caso puse las cabeceras así :
response.setHeader("Cache-Control", "private");
response.setHeader("Pragma", null);
response.setHeader("Expires", null);
Y ahora sí funciona.

martes, 7 de octubre de 2008

Internet Explorer y cookies remotas

Una vez más, problemas por culpa de Internet Explorer...

Resulta que a los "genios" desarrolladores del navegador (?) se les ocurrió una grandiosa idea: tratar a las cookies de un sitio cargado dentro de un iframe, como cookies de terceros.

Por ejemplo, tenemos el sitio www.sitiouno.com y dentro de este queremos cargar un iframe con el sitio www.sitiodos.com. El sitio sitiodos envía una cookie al navegador y cuando se ingresa de forma normal a él, el sitio tiene un funcionamiento normal. Al entrar a sitiouno con Internet Explorer se recibe la cookie, pero ésta es tratada como una cookie de terceros.

El problema de que la cookie sea tratada de esa manera es que regularmente los usuarios tienen configurado su IE en un nivel de privacidad medio, el cual "Bloquea cookies de terceros que no tienen una directiva de seguridad sólida". Este bloqueo consiste en que la cookie es eliminada, es decir, no es tomada en cuenta por el maravilloso navegador y generar una experiencia no muy grata para el usuario.

Para corregir este problema de forma rápida, basta con agregar una política de privacidad compacta en las cabeceras de la respuesta antes de intentar crear la cookie. La forma de hacer esto es:

En PHP:
<?php
header('P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
?>
En Java:
httpservletresponse.setHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
Cada conjunto de letras tiene un significado y uno lo puede adaptar según a la forma en la que quiera definir su política de privacidad. El anterior ejemplo funcionó muy bien para el problema que tuvimos nosotros, pero en http://www.w3.org/P3P/implementations.html se encuentra software para crear, editar y probar estas políticas a la medida de las necesidades. También está este formulario http://www.dmaresponsibility.org/PPG/, que genera la política según las respuestas que demos.

El problema se presenta de la versión 6 en adelante.

Bueno, ese fue el camino corto. El camino largo requiere permiso de cambiar la instalación de Apache para poder instalar mod_header y acceso a los archivos de configuración. Aunque la solución larga no la probamos, si encontramos bastante información:

Los seis pasos para crear y publicar la P3P:
http://www.w3.org/P3P/details.html

Estos son más detallados:
http://www.windley.com/archives/2008/08/p3p_and_internet_explorer.shtml
http://www.builderau.com.au/architect/webservices/soa/Implementing-privacy-preference-policies-with-P3P/0,339024590,320264989,00.htm

Acá les dejo más información:
http://www.w3.org/P3P/
http://www.webmasterworld.com/forum21/788.htm