Puñetas de javascript en IE
Hola!!
Estoy desarrollando una aplicación que lleva bastante scripting en javascript. Aquí paso a contaros los fallos que he encontrado, a ver si alguien me confirma que son fallos del explorador o chorradas que haya hecho yo. Sólo me queda tirarme por la ventana!! (la real, no la virtual :P)
1. Si un objeto se llama igual que una clase css, a internet explorer le sienta mal. Por ejemplo, si tenemos
<code><div id="pepe" class="pepe">blablbalbla</div></code> e intentamos referenciar a pepe con getElementById, nos mandará a hacer puñetas. Solución, no llamar a las dos cosas con el mismo identificador (aunque no tendría porqué, pero bueno, menuda implementación de javascript ¬_¬)
2. Si creo objetos dinámicamente (con document.createElement....) y luego les quiero asignar manejadores de eventos dinámicamente (con document.createAttribute, setAttributeNode y tal), el explorer me ignora olímpicamente. Como si no existieran mis manejadores! En cambio, mozilla firefox y mozilla a secas obedecen mis órdenes ipsofacto.
3. Si creo objetos en un frame (con document.createElement, una vez más) y luego quiero añadirlos a capas de otro frame, a explorer le parece que eso es una herejía, y me dice que nones. Una vez más, mozilla "se lo traga".
4. Finalmente, he conseguido miles de veces que me saltara el debugger de javascript de microsoft con una ventanita que decía algo tal que "Error en la línea bla. Error: no implementado". ¿Qué quieren? ¿Que les acabe yo el navegador? Por diossssssss, que es el explorer 6.0, no se supone que es "estándar"??
Tenemos que hacer campaña contra explorer!! todo el mundo a usar firefox a la de YA!
PD si alguien tiene la solución a alguno de estos problemas, que no dude en comunicármelo, gracias :)
meddle
a saber colega.
por cierto, ¿nos vamos a ver o que? :) (hoy estare casi toda la tarde en la sala Roots)
sole
Y otra buena pregunta, ¿qué quiere decir este misterioso mensaje de error del explorer...?
"No se puede ejecutar código de una secuencia de comandos liberada"
Impresionante!! ya no sé qué imaginar qué pueda ser... no sé si se lo han inventado o es que está mal traducido ...
meddle
jaja, ahi va:
<code> getMaxZ : function(obj){
if(obj && obj.length>0){
for (var ind=0; ind<obj.length; ind++) {
if(obj[ind].z > this.maxZ) this.maxZ = obj[ind].z;
}
}
else if(obj && obj.length==1) this.maxZ = obj[0].z;
else this.maxZ = 0;
return this.maxZ;
},
</code>(atencion esto solo funciona en el entorno innerdiv, explicaciones cuando este released) ;)
PD: por cierto, acostumbraos a preguntar vuestras cosas en temas nuevos si la pregunta no tiene nada que ver con el tema actual, asi no mezclamos ni quitamos protagonismo al autor principal. gracias.
hartum
yo tengo un problema, tengo una funcion para que ordene el z-index de las capas, y resulta que cuando hay solo una capa te dice que z-index es nulo o no es un objeto.
¿me puedes ayudar meddle? JAJAJAJAJAAJJAAJAJAJAJAJAJAJAJAJA
y los demas tb claro
sole
Pero sigo pensando que no es buena idea ocultar los errores... al menos no definitivamente... deberías tratar de corregirlos ;)
tú pide ayuda a ver si te podemos echar un cable!!
Import error 1562
Muuchas gracias, Meddle & Sole...
De un tiempo a esta parte me saltaba el debugger, y no sabía de qué ni por qué si antes se limitaba a marcarme los errores en la barra de abajo del navegador!
Muchas gracias!
sole
Fantástico... sí... la verdad es que no podía dormir pensando en ese fallo... Va en serio! Ahora veremos estos otros fallos :-/ Bueno ya os iré contando ;)
meddle
me ALEGRO cosa fina
[modo misterioso on]
mas ejemplos durante y despues del OFFF :)
[modo misterioso off]
sole
:)
Pues me estaba esperando a ver si conseguía resolver otros problemas raros que tenemos con el explorer, pero he de decir que tu forma de gestionar los eventos VA PERFECTAAAAAAAAAAAAA sí!!!!
Hasta lo he probado en el konqueror (tras activar javascript, claro :)) y funciona... Le pasa argumentos como quiere... es la caña... :)
meddle
sole, ¿funciona el applet con el ejemplo que te envié o no? q me tienes desinformaaaaaaaaaaao :)
sole
Porque el jefe no quiere. Cabeza más cuadrada que tu avatar :P
hartum
OYE sole y para evitar el uso de frames, ¿porque no usas ese pedazo de ejemplo de innerdiv que te he pasado para que lo testees?
De hecho es una de las utilidades que le quiero dar/y potenciar a las innerdivs.
Habra ejemplos lo prometo.
meddle
mara*
¿sabéis de algún código para anular el debugger`, para evitar que salga en pantalla?
si te refieres a una web que tu desarrolles y no quieres q los posibles errores salten, puedes usar algo como:
<code><script type="text/javascript">
function sueltaError(msg, url, linea){
alert('Mensaje: '+msg+'\nurl: '+url+'\nLinea: '+linea);
return true;
}
window.onerror=sueltaError;
alet("hi")
</script>
</code>Eso te suelta un error personalizado. Para esconder cuaquier mensaje de error, incluso en la consola del navegador, puedes poner simplemente el return true,
<code><script type="text/javascript">
window.onerror=function(){return true;}
alet("hi")
</script>
</code>
eso te asegura que no salten errores, aunque no arregla el problema ;)
sole
Mara, se puede hacer que no aparezcan los errores en plan "ventana de error" con internet explorer, configurándolo en un apartado llamado "avanzadas..." o algo así, pero sigue saliendo en la barra de estado el "Error en la página", con una señal de error.
Otra solución es tratar de no meter scripts q den fallos o al menos hacerlos resistentes a posibles fallos (cosa mu complicada, la verdad!).
Mgk, va a ser que no sé "tanto" javascript. Te lo prometo!! Si hace unos meses a duras penas me llegaba para hacer un window.alert jajaja :D
Usuario desconocido
ajjajaj, me quedo con la boca abierta cuando veo a estos dos hablando..jejejejeej.......por qué no dan la charla del OFFF los dos juntos???..un abrazo!!! (tenía que decir esta chorrada...)
Import error 1562
hola, disculpad mi pregunta torpe: ¿sabéis de algún código para anular el debugger`, para evitar que salga en pantalla?.
Si la web funciona, y si no tengo los conocimientos de JS necesarios (y este es exactamente el caso) prefiero esconderlo todo 'que no se vea'.
:)
meddle
sole, ¿vienes al OFFF? doy una charla el jueves q t puede interesar
sole
¡Eso del namespace me interesa!
No sabía que existiera también en javascript, y si funciona como en c++, puede molar un puñado. ¿Donde puedo encontrar más información? Es qie tengo tropocientasmil variables en los documentos, y algo para aislar, sin necesidad de crear objetos y usarlos en plan cosa.prototype.valor, molaría mucho.
Aunque no sé porqué pero me da la impresión de que va por ahí lo de los namespaces :-(
meddle
1. correcto, pero depende del namespace (donde esten definidas las 2 variables)
2. correcto, ya he hablado de eso aqui en el foro antes:
https://www.domestika.org/foros/viewtopic.php?t=19579
sole
Ok se me fue la pinza. Concretamente el fallo es:
"si llamo a una variable de javascript igual que otra capa de la página, peta"
(¡¡eso tengo apuntado en mi libreta mágica!!)
Imagino que el parser de javascript para ie no redefine automáticamente los tipos, y por eso suelta algo tal que "El objeto no acepta esta propiedad o método".
A todo esto, otro fallo que tengo aquí apuntado, si intentas modificar por código el valor de una propiedad css, de un objeto que no tiene clase css asociada, también peta.
Recuerdo que me hacía "cosas raras" el navegador (IE, claro!)
Toda una angustia, tú.
meddle
sole
1. ya buscaré el código que me daba ese fallo, y en ie6 :-o
estare esperando :P
sole
1. ya buscaré el código que me daba ese fallo, y en ie6 :-o
2. echaré un vistazo
3. si yo lo intento... pero no hay quien convenza al jefe :-( además menudo asco para referenciar los objetos que estan en sitios diferente... y para recargar... son lo peor...
4. si lo mejor no es restarle una línea, sino que cuando hace includes de archivos js, se pierde en un mar de código y sólo sabe decirte que "fichero desconocido" x'D
Menos mal que yo me imagino donde está el fallo, o que a base de window.alert acabas depurando (método cutre salchichero)...
meddle
sole,
1. pues repito que hay algo que no esta bien ;) ejemplo<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test</title>
<style type="text/css">
.wrapper {color: red}
</style>
<script type="text/javascript"">
onload = function(){
alert(document.getElementById("wrapper").innerHTML)
}
</script>
</head>
<body>
<div id="wrapper" class="wrapper">
hi
</div>
</body>
</html></code>eso a mi me funciona en el IE6
2. para manejadores de eventos mas complejos deberias empaparte bien los tutoriales de Tom Trenka, su libreria SI permite añadir parametros a los eventos: http://fm.dept-z.com/ (esta en ingles y es un nivel de js bastante avanzado, pero seguro que lo entiendes bien)
3. jaja, no frames plis :)
4. ademas normalmente debes restar una linea al numero de linea del error que te suelte.
joshuatree
Dos potencias en accion... Lo mismo digo, Txuma...
txuma Plus
snif, snif, algun día entenderé como Dios manda estas cosas tan raras de las que habláis :P
sole
1. te lo juro por arturo que pasaba, incluso hice una página suelta con sólo ese código, y seguía fallando. Es inaudito. Es como si redefiniera la variable pepe y crea que es una clase css (objeto css de tipo class).
2. El tema es que así no puedo pasarle parámetros a la función manejadora :-(
3. los frames son para que un applet que envía cositas a un servidor de datos no esté recargándose a todas horas, que le cuesta un web inicializarse. Si ya dije yo de no usar frames, mwhahaha!
4. Lo corroboro!
meddle
1. no deberia ser asi, probablemente tengas alguna otra cosa mal. si puedes poner un enlace me lo miro cuando pueda
2. los eventos mejor manejarlos con un manejador externo tipo el de Scott Andrew. Si vas al OFFF puedes venir a ver mi charla, igual te interesa. Otra solucion seria crear el elemento y luego asignarle el evento html directamente, algo del tipo:
<code>var obj = document.createElement....
obj.onclick = metodoblah; // ojo sin ()</code>
3. lo siento no uso frames, pero igual quieres añadir a otro frame el contenido del body de un frame, yo usaria algo del estilo:
<code>parent.document.getElementById("micapa").innerHTML = document.body.innerHTML</code>donde micapa es el destino y document.body.innerHTML es el frame a copiar, claro q como puedes observar eso lo llamas desde el documento que esta en el frame.
4. el debugger del IE es una PUTA MIERDA. :)
suerte