Come si interrompe il browser da 'clessidrando' quando JavaScript è fatto (STOP Throbber)?

StackOverflow https://stackoverflow.com/questions/6067976

  •  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>
.

È stato utile?

Soluzione

Dopo aver chiamato document.write(), è necessario chiamare document.close() se il documento non è stato precedentemente chiuso.

Fondamentalmente, questo accade:

    .
  1. La pagina viene inversa
  2. Gli script sono elaborati
  3. Pagina è "chiuso" (document.close())
  4. 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>
    
    .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top