Newsgroup: it.comp.lang.javascript
Titolo: Script che manda in crash Mozilla ?!?

Questo è un vero rompicapo...
Qualcuno ha idea di che cosa ci sia in questo script
che manda in crash SOLO Mozilla e Netscape6.x?
(su qualunque altro browser funziona...)
Ho provato anche a lanciare la javascript console di Mozilla
ma non trova l'ombra di un errore
(prima di piantarsi... :D)
Se qualcuno ne viene a capo gli faccio un monumento...
ci sto letteralmente impazzendo.
Ecco lo script:
<script Language=Javascript type="text/javascript">
<!--
var x,y
var step=20
var flag=0
var message="ciao mondo! "
message=message.split(" ")
var xpos=new Array()
for (i=0;i<=message.length-1;i++) {
 xpos[i]=-50}
var ypos=new Array()
for (i=0;i<=message.length-1;i++) {
 ypos[i]=-50}
function handlerMM(e){
 if (document.layers)
  {x = e.pageX; y = e.pageY}
 else if (document.all || navigator.userAgent.indexOf("Opera")>-1)
  {x = document.body.scrollLeft+event.clientX; y = document.body.scrollTop+event.clientY}
 else if (document.getElementById)
  {x = window.pageXOffset + e.clientX; y = window.pageYOffset + e.clientY}
 flag=1}
function makesnake() {
 if (flag==1 && document.all) {
     for (i=message.length-1; i>=1; i--) {
      xpos[i]=xpos[i-1]+step
   ypos[i]=ypos[i-1]}
  xpos[0]=x+step
  ypos[0]=y
  for (i=0; i<message.length-1; i++) {
      var thisspan = eval("span"+(i)+".style")
      thisspan.posLeft=xpos[i]
   thisspan.posTop=ypos[i]}}
 else if (flag==1 && document.layers) {
     for (i=message.length-1; i>=1; i--) {
      xpos[i]=xpos[i-1]+step
   ypos[i]=ypos[i-1]}
  xpos[0]=x+step
  ypos[0]=y
  for (i=0; i<message.length-1; i++) {
      var thisspan = eval("document.span"+i)
      thisspan.left=xpos[i]
   thisspan.top=ypos[i]}}
 else if (flag==1 && document.getElementById) {
 for (i=message.length-1; i>=1; i--) {
   xpos[i]=xpos[i-1]+step
   ypos[i]=ypos[i-1]}
  xpos[0]=x+step
  ypos[0]=y
  for (i=0; i<message.length-1; i++) {
  var name= "span"+i
  layerRef=document.getElementById(name).style
  layerRef.left=xpos[i]
  layerRef.top=ypos[i]}
  setTimeout("makesnake()",30)}
 var timer=setTimeout("makesnake()",1)}
// -->
</script>
</head><body onLoad="makesnake()" style="overflow-x: hidden; overflow-y: scroll;">
<script Language="Javascript" type="text/javascript">
<!--
for (i=0;i<=message.length-1;i++) {
    document.write("<span id='span"+i+"' class='spanstyle'>")
    document.write(message[i])
    document.write("</"+"span>")}
if (document.layers){
 document.captureEvents(Event.MOUSEMOVE);}
document.onmousemove = handlerMM;
// -->
</script>
NB: Mozilla prima di piantarsi va avanti per qualche secondo,
dunque credo che lo script generi un sovraccarico della CPU
(per qualche motivo c'è qualcosa che cicla a vuoto... ma cosa?
e perché solo su Mozilla e Netscape 6?)
Opera (che riconosce perfettamente lo script)
legge esattamente tutte le parti di codice che legge Mozilla, tranne la riga:
{x = window.pageXOffset + e.clientX; y = window.pageYOffset + e.clientY}
letta solo da Mozilla...
ma mi sembra corretta...
Grazie per la collaborazione!
MaRoK

 
Prova ad eliminare uno di questi due timer e forse risolvi il problema 
del crash
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 del crash
Grazie! Il problema era proprio quello!!!
Il crash non era causato da errori nel codice, come pensavo,
ma solo dalla pesantezza di Netscape6.x e Mozilla
che, sovraccaricando la cpu, non riuscivano a gestire i refresh.
Eliminando il primo timer, e portando il secondo a 24
l'effetto "snake" è meno fluido, perché il refresh è più lento,
ma l'impegno della CPU è molto minore...
così anche Netscape6.x e Mozilla... "resistono"! :o)
MaRoK