PDA

Ver la versión completa : Problema con Script en Firefox



Mo1
29/11/2008, 17:56
Buenas tardes, os describo el problema.

He puesto un script en una web, obtenido aqui:
http://htmldyn.iwebland.com/htmldyn3/nieve.htm

Este es el código en cuestión:

<script language="JavaScript1.2">

/******************************************
* Nieve Script - HTML.Dynamico 2001
* Mas Scripts y Recursos para tu web en:
* http://www.htmldynamico.cjb.net
******************************************/


// Configure para cambiar el URL path de la imagen
var snowsrc="snow.gif"
// Configure para cambiar la cantidad de nieve
var no = 10;

var ns4up = (document.layers) ? 1 : 0; // browser sniffer
var ie4up = (document.all) ? 1 : 0;
var ns6up = (document.getElementById&&!document.all) ? 1 : 0;

var dx, xp, yp; // coordinate and position variables
var am, stx, sty; // amplitude and step variables
var i, doc_width = 800, doc_height = 600;

if (ns4up||ns6up) {
doc_width = self.innerWidth;
doc_height = self.innerHeight;
} else if (ie4up) {
doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;
}

dx = new Array();
xp = new Array();
yp = new Array();
am = new Array();
stx = new Array();
sty = new Array();

for (i = 0; i < no; ++ i) {
dx[i] = 0; // set coordinate variables
xp[i] = Math.random()*(doc_width-50); // set position variables
yp[i] = Math.random()*doc_height;
am[i] = Math.random()*20; // set amplitude variables
stx[i] = 0.02 + Math.random()/10; // set step variables
sty[i] = 0.7 + Math.random(); // set step variables
if (ns4up) { // set layers
if (i == 0) {
document.write("<layer name=\"dot"+ i +"\" left=\"15\" top=\"15\" visibility=\"show\"><a><img src='"+snowsrc+"' border=\"0\"><\/a><\/layer>");
} else {
document.write("<layer name=\"dot"+ i +"\" left=\"15\" top=\"15\" visibility=\"show\"><img src='"+snowsrc+"' border=\"0\"><\/layer>");
}
} else if (ie4up||ns6up) {
if (i == 0) {
document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"; VISIBILITY: visible; TOP: 15px; LEFT: 15px;\"><a><img src='"+snowsrc+"' border=\"0\"><\/a><\/div>");
} else {
document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"; VISIBILITY: visible; TOP: 15px; LEFT: 15px;\"><img src='"+snowsrc+"' border=\"0\"><\/div>");
}
}
}

function snowNS() { // Netscape main animation function
for (i = 0; i < no; ++ i) { // iterate for every dot
yp[i] += sty[i];
if (yp[i] > doc_height-50) {
xp[i] = Math.random()*(doc_width-am[i]-30);
yp[i] = 0;
stx[i] = 0.02 + Math.random()/10;
sty[i] = 0.7 + Math.random();
doc_width = self.innerWidth;
doc_height = self.innerHeight;
}
dx[i] += stx[i];
document.layers["dot"+i].top = yp[i];
document.layers["dot"+i].left = xp[i] + am[i]*Math.sin(dx[i]);
}
setTimeout("snowNS()", 10);
}

function snowIE_NS6() { // IE and NS6 main animation function
for (i = 0; i < no; ++ i) { // iterate for every dot
yp[i] += sty[i];
if (yp[i] > doc_height-50) {
xp[i] = Math.random()*(doc_width-am[i]-30);
yp[i] = 0;
stx[i] = 0.02 + Math.random()/10;
sty[i] = 0.7 + Math.random();
doc_width = ns6up?window.innerWidth : document.body.clientWidth;
doc_height = ns6up?window.innerHeight : document.body.clientHeight;
}
dx[i] += stx[i];
if (ie4up){
document.all["dot"+i].style.pixelTop = yp[i];
document.all["dot"+i].style.pixelLeft = xp[i] + am[i]*Math.sin(dx[i]);
}
else if (ns6up){
document.getElementById("dot"+i).style.top=yp[i];
document.getElementById("dot"+i).style.left=xp[i] + am[i]*Math.sin(dx[i]);
}
}
setTimeout("snowIE_NS6()", 10);
}

if (ns4up) {
snowNS();
} else if (ie4up||ns6up) {
snowIE_NS6();
}

</script>

La cosa es que como podeis comprobar, funciona bien con IE, pero no en Firefox, alguien sabe como solucionarlo?

Esta es la web en cuestión:

www.vd7.es

Graaacias de antemano^^

neostalker
29/11/2008, 17:58
Hola, te he borrado uno de los hilos porque lo debiste duplicar por error.

Mo1
29/11/2008, 18:12
ok gracias, debió de ser al editarlo, perrrrdón.

^MiSaTo^
29/11/2008, 18:20
Te importa hacer una captura de como se ve en IE? No uso windows y no puedo probar cómo debe quedar.
Seguramente sea alguna función que para IE es de una manera y para firefox de otra, puedes mirar en w3schools que ahí viene compatibilidad de cada función de javascript.

Mo1
29/11/2008, 18:44
aqui está la captura

http://img76.imageshack.us/img76/1912/dibujoxw6.th.png (http://img76.imageshack.us/my.php?image=dibujoxw6.png)

^MiSaTo^
29/11/2008, 20:03
Pues yo viendo tu captura y lo que me sale a mi con Firefox, lo veo igual xDD

Mo1
29/11/2008, 20:52
que versión de firefox usas?

vizales77
29/11/2008, 20:58
yo uso la 3.0.4 en windows y no me sale nieve alguna, que supongo será lo que quieres que salga.

desde fedora con el mismo firefox idem.

por ahí leí que habia programas para depurar javascript, quizá te ayude en algo
http://www.anieto2k.com/2006/11/16/firebug-amaras-las-cucarachas/

Mo1
30/11/2008, 11:10
Nada no hay manera. He revisado el código con mis simples conocimientos y con ayuda de alguna que otra herramienta, y supongo que el problema no es del codigo, por que si a misato le funciona también en firefox...

aaahhhhh :loco:

^MiSaTo^
30/11/2008, 14:01
Yo uso firefox 3 en Mac OS, luego si quieres te miro en Safari por ejemplo.
Pero veo la misma imagen de la captura con el firefox

Mo1
30/11/2008, 14:38
La captura que postee está hecha desde IE, esta que pongo ahora es como se ve en firefox:

http://img146.imageshack.us/img146/1199/dibujoni4.th.png (http://img146.imageshack.us/my.php?image=dibujoni4.png)


Se ven ahí esos 3 copitos que ni se mueven ni na :(

^MiSaTo^
30/11/2008, 14:45
Vale ya veo la diferencia, y con Safari se ve igual de mal (vamos los copos ahí arriba).
Voy a ver si veo algo raro en tu código, aunque ayer mirando así a ojo no parecía nada raro ;)

< - >
En principio y por lo que veo estas tres líneas son las que diferencian el navegador:


var ns4up = (document.layers) ? 1 : 0; // browser sniffer
var ie4up = (document.all) ? 1 : 0;
var ns6up = (document.getElementById&&!document.all) ? 1 : 0;

La cosa es que la función que hace la nieve para el ie también es la que lo hace para el firefox (ns6up, por lo que entiendo yo). De todos modos no veo nada raruno en el código, claro que yo no he trabajado con capas nunca, así que a no ser que sea de eso...

Mi sugerencia es que compruebes lo del navegador de otra manera que hay funciones para ello (ahora mismo no recuerdo de memoria cuál es) y en base a eso, hagas el resto porque lo mismo te está detectando mal el navegador.
Un saludo

Mo1
30/11/2008, 16:29
A que te refieres exacactamente con que me detecte mal el navegador?

Perdona mi ignorancia :P

^MiSaTo^
01/12/2008, 01:34
A que te refieres exacactamente con que me detecte mal el navegador?

Perdona mi ignorancia :P

Pues que no todos los navegadores interpretan igual el javascrip, por eso ves en firefox una cosa y en IE otra.
En esas líneas que te he copiado, lo que hace es ver qué navegador es y en base a eso más abajo genera la nieve.
A lo que me refiero es que a lo mejor no está mirando qué navegador es como es debido.
Un saludo