2011-09-06 23 views
8

Estoy tratando de entender un error de script intermitente que estoy viendo en una aplicación de cliente ligero intensiva de JavaScript que se ejecuta en Internet Explorer 6 y Windows XP. La causa raíz del problema es que la siguiente llamada a la función devuelve un valor null (sin embargo, tiene éxito sin un error):¿En qué situación sería document.open() return null?

var doc = targetWindow.document.open("text/html","_replace"); 

Dónde targetWindow es un objeto window.

Ni targetWindow ni targetWindow.document es null y por lo que estoy luchando para entender por qué esta llamada volvería null. Mi interpretación de the documentation es que este método nunca debería devolver nulo.

Este código no se ha modificado y funciona perfectamente durante muchos años. Hasta que entiendo por qué sucede esto, no estoy seguro de cómo podría manejar esto o qué podría haber cambiado para que esto suceda.

¿Qué podría causar esta función llamada para devolver nulo?

+2

¿Es posible dejar de soportar IE6? Después de todo, Microsoft ni siquiera lo soporta más. Además, IE8 funciona bien en Windows XP. Si se trata de un entorno corporativo, debe convencerlos de que finalmente se actualicen lejos de las inseguridades, fallas y limitaciones de IE6. –

Respuesta

1

De acuerdo con la documentación, debe pasar "replace", no "_replace". Prueba este lugar:

var doc = targetWindow.document.open("text/html", "replace"); 

Dado que usted dice su código ha trabajado durante años, entonces es probable que algo ha cambiado y la sugerencia anterior puede ser el problema. Sin embargo, todavía vale la pena intentarlo.

¿Ha cambiado algún archivo js/biblioteca que está utilizando en su aplicación últimamente? Además, ¿está utilizando algún complemento de navegador dentro de la página? Es posible que una versión más reciente de cualquiera de estos pueda estar afectando de algún modo a su llamada a "document.open".

0

document.open() no tiene ningún parámetro según el estándar W3C. Echa un vistazo a este enlace: http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-72161170

Te recomiendo que uses la documentación W3C en lugar de la de Microsoft porque con W3C estás seguro de que funciona en todos los navegadores modernos, mientras que Microsoft es muy conocido por agregar extensiones que, por supuesto, solo funciona en sus propios productos. Se llama EEE (abrazo, extender y extinguir).

Simplemente use document.open() sin argumentos. Hay formas de manipular el historial de usuarios, pero eso se llama mala práctica de programación. El historial es la información privada del usuario y la aplicación web no debe tratar de manipularlo.

+3

Normalmente, lo apoyaría de todo corazón, pero el OP está manteniendo una aplicación que (mientras la leo) * solo * se ejecuta en IE6, en cuyo caso esta respuesta es casi completamente inútil. La pequeña diatriba sobre EEE solo empeora las cosas. –

Cuestiones relacionadas