Come si interrompe il browser da 'clessidrando' quando JavaScript è fatto (STOP Throbber)?
-
06-09-2020 - |
Domanda
Scrivendo una piccola pagina Web HTML con un po 'di semplice semplice, ho notato che dopo che è stato fatto, ha mantenuto la rotazione del cerchio (Firefox). Ho visto che molte volte in altre pagine e ho sempre pensato che fosse un errore JavaScript o un problema di ciclo, ma questo programma che stavo correndo è stato decisamente fatto.
Ecco un esempio di una piccola pagina web che fa questo. Dopo aver fatto clic sul pulsante e processi IT, il Throbber (grazie per Kooilinc per il termine) continua ad andare avanti.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Grade Tester</title>
<script language="javascript" type="text/javascript">
function calculate()
{
var grade = document.getElementById("grade").value.toUpperCase();
switch (grade)
{
case "A":
document.write("Outstanding Achievement");
break;
case "B":
document.write("Above Average");
break;
case "C":
document.write("Average Achievement");
break;
case "D":
document.write("Low Passing Grade");
break;
case "F":
document.write("Failing Grade");
break;
}
}
</script>
</head>
<body>
Grade:<input type="text" id="grade" />
<br /><input type="button" value="Get Result" onclick="calculate()" />
</body>
</html>
.
Sono stato in grado di fermarlo colpendo la fermata (clic con il tasto destro e arresto).
Cosa devo fare per ottenere JavaScript per interrompere l'elaborazione (o il browser per interrompere l'elaborazione) dopo aver eseguito lo script?
Nota1: Si è verificato in FF4.01, non in IE o in cromo (per questo campione di codice).
Nota2: Ho provato la funzione Window.Stop () dopo l'istruzione Switch, e non ha fermato il Throbber.
Come da risposta di Lekensteyn, Document.Close () dopo che l'istruzione Switch ha risolto questo, ma ecco un esempio che non ha battuto affatto e non usa Document.Close ().
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Lab 9.1</title>
</head>
<body>
<script language="javascript" type="text/javascript">
var phrase = "Every good boy does fine goes on the line."
document.write(phrase.length + "<br />");
for(var i = 0; i < phrase.length; i++)
{
document.write(phrase.charCodeAt(i) + " ");
}
document.write("<br />");
document.write(phrase.toLowerCase() + "<br />");
document.write(phrase.toUpperCase() + "<br />");
</script>
</body>
</html>
. Soluzione
Dopo aver chiamato document.write()
, è necessario chiamare document.close()
se il documento non è stato precedentemente chiuso.
Fondamentalmente, questo accade:
- .
- La pagina viene inversa
- Gli script sono elaborati
- Pagina è "chiuso" (
document.close()
)
Se document.write()
è chiamato all'interno del passaggio 2, sarà terminato al punto 3.
Oltre il passaggio 3, se chiami document.write
, apre di nuovo la pagina, ma la pagina non si chiuderà in FF (non è sicuro degli altri).Devi chiuderlo chiamando document.close()
.
L'ho scoperto quando avevo bisogno di aprire una finestra e scrivi rapidamente in FF.
var win = window.open();
win.document.write("something");
// the next line is required to finish the page
win.document.close();
.
Lo stesso vale per il tuo caso:
<script type="text/javascript">
function calculate()
{
var grade = document.getElementById("grade").value.toUpperCase();
switch (grade)
{
case "A":
document.write("Outstanding Achievement");
break;
// removed some cases
case "F":
document.write("Failing Grade");
break;
}
// finish the document
document.close();
}
</script>
.