Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    impedire comparsa messaggio "ferma lo script"

    Salve a tutti, in una pagina ho un filmato flash che va caricato tramite un codice javascript.
    il filmato funziona, solo che mi esce il seguente messaggio di conferma:

    uno script in questa pagina potrebbe essere occupato o aver smesso di rispondere. E' possibile fermare lo script adesso o attendere epr vedere se lo script conlcude la sua esecuzione.

    "Ferma lo script" "continua"
    se premo "continua" va tutto ok, solo che vorrei trovare un sistema per non farmi apparire questo messaggio.
    Come potrei fare???

    Grazie, ciao.

  2. #2
    Vorrà dire che c'è qualcosa che rallenta il tuo script, di certo dovresti notare un forte rallentamento quando apri questa pagina.
    Posta lo script ovviamente.

  3. #3
    a dire la sincera verità mi fa questa cosa solo con firefox e mozilla, cmq questo è lo script:

    codice:
    /* funzione di ricerca */
    // inizio timer
    timer = new Date();
    var tempoIniziale = Math.round(timer.getTime()/1000);
    var stato = '<%= stato %>'
    mainFinestra=""
    function cercaFlash(movie,livelloNuovo,x,y,movieRif){
    	var IE = navigator.userAgent.indexOf("Microsoft")!= -1;
    	if (stato == ""){
    		if (window.opener == null  || !window.opener || opener.closed){
    			stato = "mF";
    			mainFinestra = window.open('MainCartina2.asp','MainCartina','scrollbars=yes, toolbar=yes, status=yes, menubar=yes, location=yes, resizable=yes');
    			var filmato = IE ? mainFinestra.mainCartina : mainFinestra.document.mainCartina;	
    			// crossborwser Opera7.5
    			if (filmato == "[object HTMLEmbedElement]"){filmato = undefined 
    			}
    			//
    			while (filmato == undefined){
    				var filmato = IE ? mainFinestra.mainCartina : mainFinestra.document.mainCartina;	
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}
    				if (filmato != undefined){
    					var filmato = IE ? mainFinestra.mainCartina : mainFinestra.document.mainCartina;
    					timer = new Date();
    					tempoIniziale = Math.round(timer.getTime()/1000);
    					break;
    				}
    			}
    			PosizionePrincipale = filmato.TCurrentLabel("_level0");
    			while (PosizionePrincipale != "arrivo"){
    				PosizionePrincipale = filmato.TCurrentLabel("_level0");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}
    				if (PosizionePrincipale == "arrivo"){ 
    					timer = new Date();
    					tempoIniziale = Math.round(timer.getTime()/1000);
    					break;
    				}
    			}
    		}
    		else if (window.opener){
    			var filmato = IE  ? opener.mainCartina : opener.document.mainCartina;
    		}
    	// chiudo l'if stato =""
    	}
    	else if (!window.opener  || opener.closed  || (window.opener == null)){
    		mainFinestra = window.open('','MainCartina','scrollbars=yes, toolbar=yes, status=yes, menubar=yes, location=yes, resizable=yes');
    		var filmato = IE ? mainFinestra.mainCartina : mainFinestra.document.mainCartina;
    	}
    	// viene selezionato il filmato in base a dove si ci trova
    	var livelloV = filmato.GetVariable("_level0.livello");
    	var livelloN = "_level"+livelloNuovo;
    	var settoreV = filmato.GetVariable("_level0.settore");	
    
    	// se ci troviamo su maincartina level0
    	if (livelloV == "_level0"){
    		// impostiamo per andare a level1 o level2
    		sceltaLivello(filmato,movie,movieRif,x,y,livelloN);
    	}		
    	// se siamo a level1
    	else if (livelloV == "_level1"){
    		sceltaMovie(filmato,movie,movieRif,x,y,livelloN,settoreV);
    	}
    	// se siamo a level2
    	else if (livelloV == "_level2"){
    		// se siamo sullo stesso movie
    		if (settoreV == movie){
    			risultato(filmato,movie,movieRif,x,y,livelloN)
    		}
    		// se siamo su un'altro movie
    		else if (settoreV != movie){
    		// fai partire il filmato in modo tale da scaricarsi e aspetta finche non si scarica ad andare avanti
    			filmato.TPlay("_level2");
    			posizione = filmato.TCurrentFrame("_root._level2");
    			while (posizione != "-1"){
    				posizione = filmato.TCurrentFrame("_root._level2");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}								
    				if (posizione == "-1"){
    					break;
    				}
    			}
    			sceltaLivello(filmato,movie,movieRif,x,y,livelloN);
    		}
    	}
    }
    
    function direzione(){
    	if (!mainFinestra || mainFinestra.closed){
    	document.form1.stato.value = ""
    	}
    	else{
    	document.form1.stato.value = stato
    	}
    }	
    
    
    /* queste funzioni servono per adagiare la navigazione all'interno della funzione successiva ed evitare ripetizioni di codice.
    */
    
    // questa funzione permette di comportarci in base alla scelta del settore del movie
    function sceltaMovie(filmato,movie,movieRif,x,y,livelloN,settoreV){
    // se siamo sullo stesso movie
    		if (settoreV == movie){
    			risultato(filmato,movie,movieRif,x,y,livelloN)
    		}
    		// se siamo su un'altro movie
    		
    		else if (settoreV != movie){
    			filmato.TPlay("_level1");
    			sceltaLivello(filmato,movie,movieRif,x,y,livelloN);
    		}
    }
    
    
    // posiziona la freccia e da il risultato
    function risultato(filmato,movie,movieRif,x,y,livelloN){
    	filmato.TSetProperty("_root."+livelloN+".freccia", 0, x);
    	filmato.TSetProperty("_root."+livelloN+".freccia", 1, y);
    	$("caricamento").style.display ="none";
    	inizializza("caricato");
    	$("caricato").style.display ="block"; 
    	top.focus(); 
    	self.focus();
    }
    
    
    // seleziona il movie scelto dal motore
    function sceltaLivello(filmato,movie,movieRif,x,y,livelloN){ 
    // se dobbiamo andare a level1
    	if (livelloN == "_level1"){
    
    			filmato.TSetProperty("_level0", 7, 0);
    			filmato.LoadMovie(1, movie);
    			posizione = filmato.TCurrentLabel("_root._level1");
    			while (posizione != "arrivo"){
    				posizione = filmato.TCurrentLabel("_root._level1");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}								
    				if (posizione == "arrivo"){
    					break;
    				}
    			}		
    			risultato(filmato,movie,movieRif,x,y,livelloN);
    		}
    		// se dobbiamo andare a level2
    		else if (livelloN == "_level2"){
    			filmato.TSetProperty("_level0", 7, 0);
    			filmato.LoadMovie(1, movieRif);
    			posizione = filmato.TCurrentLabel("_root._level1");
    			while (posizione != "arrivo"){
    				posizione = filmato.TCurrentLabel("_root._level1");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}
    				if (posizione == "arrivo"){
    					break;
    				}
    			}
    			filmato.TSetProperty("_level1", 7, 0);
    			filmato.LoadMovie(2, movie);
    			posizione = filmato.TCurrentLabel("_root._level2");
    			while (posizione != "arrivo"){
    				posizione = filmato.TCurrentLabel("_root._level2");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}
    				if (posizione == "arrivo"){
    					break;
    				}
    			}
    			risultato(filmato,movie,movieRif,x,y,livelloN);
    		}
    
    }
    Grazie per il tuo interesse,
    Ciao.

  4. #4
    Nello script è presente una fantomatica funzione Errore la quale non vedo definita da nessuna parte, ma onestamente non credo che il tuo problema risieda in questo. Più verosimilmente uno dei cicli continua all'infinito o comunque più del dovuto; e visto che all'interno di questi cicli usi delle funzioni per interfacciarti a Flash è normale che ci sia un rallentamento.
    Non conosco bene queste funzioni per interfacciarsi a flash e quindi dovrò andare un pò a tentoni.
    Ad esempio in questo while:
    codice:
    			while (PosizionePrincipale != "arrivo"){
    				PosizionePrincipale = filmato.TCurrentLabel("_level0");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}
    				if (PosizionePrincipale == "arrivo"){ 
    					timer = new Date();
    					tempoIniziale = Math.round(timer.getTime()/1000);
    					break;
    				}
    			}
    Sei sicuro che ci sia un label "arrivo"?
    Senza contare che tale ciclo è ripetuto più volte; se ciò è necessario potresti almeno crearti una funzione con questo codice invece di fare un copia incolla.
    Ho dubbi anche su questo while:
    codice:
    			while (posizione != "-1"){
    				posizione = filmato.TCurrentFrame("_root._level2");
    				timer = new Date();
    				var tempoFinale = Math.round(timer.getTime()/1000);
    				if (tempoFinale-tempoIniziale == 60){
    					Errore();
    					break;
    				}								
    				if (posizione == "-1"){
    					break;
    				}
    			}
    Quando è che posizione dovrebbe essere uguale a -1?
    Ciò che è sicuro è che il problema risiede su uno dei cicli, almeno su questo non ci piove.

    PS: Con gli altri browser lo script va lento o viene eseguito velocemente?

  5. #5
    Grazie per la tua risposta Mega69.
    con explorer va una bomba, mozzilla è più lento,
    a dire il vero sono due anni che maneggio questo script e alcuni punti li ho scordati, cmq:

    - la funzione "errore" è un'altra funzione esterna che non ho postato perchè è un banale alert personalizzato, non dipende da questo.

    - il primo codice che mi hai postato è apposto, esiste una label "arrivo"

    - posizione = "-1" non so che vuol dire devo aprire il filmato flash, cmq si riferisce all'etichetta di un fotogramma o ad una posizione di un fotogramma, (prendo questa come ultima ipotesi da controllare)

    - non è possibile mettere il ciclo while in una funzione in quanto vengono usate variabili diverse, es:
    codice:
    while (PosizionePrincipale != "arrivo"){
    				PosizionePrincipale = filmato.TCurrentLabel("_level0");
    codice:
    while (posizione != "-1"){
    				posizione = filmato.TCurrentFrame("_root._level2");
    codice:
    while (posizione != "arrivo"){
    				posizione = filmato.TCurrentLabel("_root._level1");
    appesantirei solo lo script con una miriade di variabiline da passare su stirnghe e pagine, e se non mi vanno a funzionare, valle a trovare poi.

    in definitiva, a quanto pare l'errore sta nel ciclo while, e mi rimangono solo due opportunità:

    - diminuire il timer portarlo a 30 secondi, purtroppo a discapito di chi non ha una connessione veloce e quindi non mi converrebbe.
    - eliminare definitivamente il ciclo while, penso sia la soluzione migliore, e su questo vorrei un tuo parere (o di chi sta leggendo).
    Il ciclo while serve a controllare se effettivametne esiste quel filmato o quel fotogramma in quel filmato:

    pseudo:
    codice:
    azzera il tempo
    finchè posizione è diversa da "arrivo" tu riprova a controllare
    se la posizione è uguale, ferma il tempo e passa avanti
    se scade il tempo (i 60 secondi) restituisci un messaggio di errore.
    purtroppo questo è un controllo che avevo ideato nel caso qualche distrattone non pubblicasse il filmato o per qualche motivo strano non venisse pubblicato, o se il filmato è in movimento e ancora non si è fermato (impossibilità di caricare le variabili presenti nel filmato setsso in quanto ancora non lette dalla timeline)

    in definitiva, vorrei sapere se è possibile sostituire il ciclo while, o se esiste qualche nuova tecnica creata apposta per interfacciare javascript con flash (e finalmente sostituire il controllo), ma che non sia troppo laboriosa (installare nuovi componenti sul server ecc...).

    Grazie infinite per la tua pazienza, un saluto e auguri di buone feste.

  6. #6
    Credo di aver capito.
    Ciò che ti serve è un setInterval:
    codice:
    var i = setInterval(function() {
      var PosizionePrincipale = filmato.TCurrentLabel("_level0");
      if(PosizionePrincipale=="arrivo") {
         clearInterval(i);
         //Fai altre operazioni
      }
    }, 100)
    La logica è questa, lascio a te il compito di "convertire" i blocchi while in setInterval.

  7. #7
    Grazie Mega, era proprio quello che cercavo, solo che ho provato a cambiare qualcosa ed ho capito che ho molto da lavorare, ti pregherei a questo punto di darmi un piccolo aiutino:

    questo il mio codice (non funzionante)
    codice:
    setInterval(if (PosizionePrincipale == "arrivo"){clearInterval()},1000);
    Il codice ovviamente non funziona, (mi da errore sulle parentesi di (PosizionePrincipale == "arrivo") ).
    Se PosizionePrincipiale è uguale ad arrivo, esci dal ciclo, senno ripeti questo cilco per 1000 millisecondi.

    in pratica dovrei solo sistemare la sintassi.

    Grazie ancora per il tuo aiuto.

  8. #8
    codice:
    var i = setInterval(function() {
      if (PosizionePrincipale == "arrivo")
        clearInterval(i)
      else {
        //Se il label non è arrivo fai altre cose
      }
    }, 1000);
    Gli errori che avevi fatto sono che il codice va messo in una funzione o tra virgolette ( meglio la rpima ) e secondo clearInterval deve avere come argomento l'id dell'intervallo.
    Attenzione, il ciclo non viene ripetuto per 1000 millisecondi, bensì OGNI 1000 millisecondi.

  9. #9
    Perdonami se sono un pochettino tardo, ma se non capisco la base, non posso andare avanti.
    Io ho fatto questo script per provare:

    codice:
    <script language="javascript1.2" type="text/javascript">
    document.write("inizio script");
    i = 0
    function stmpRiga(){
    document.write("riga"+i); 
    i++ ; 
    if (i == 10){
    alert('fine')
    }
    }
    x = window.setInterval("stmpRiga()",1000);
    </script>
    - ogni 1000 millisecondi stampa la scritta "rigaN" quando l'hai stampata per 10 volte, restituisci un'alert.

    Lo script mi stampa "inizio script", poi mi stampa riga0 e si ferma.

    dove sbaglio?

  10. #10
    Gli errori sono due. Il primo è che alla fine dovresti anche invocare clearInterval.
    Il secondo è che document.write va invocato solo prima del caricamento della pagina; in parole povere sei andato a pescare l'unica istruzione che non avrebbe fatto funzionare lo script
    codice:
    <script language="javascript1.2" type="text/javascript">
    i = 0
    function stmpRiga(){
    alert("riga"+i); 
    i++ ; 
    if (i == 10){
    clearInterval(x)
    alert('fine')
    }
    }
    x = window.setInterval("stmpRiga()",1000);
    </script>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.