¿Cómo se puede detener el navegador de 'hourglassing' cuando Javascript está HECHO (stop throbber)?

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

  •  06-09-2020
  •  | 
  •  

Pregunta

La escritura de un pequeño código HTML de la página web con algunas muy simple Javascript en ella, me di cuenta de que después de que se ha hecho, se mantiene el círculo de giro (firefox).He visto que muchas veces, en otras páginas y siempre pensé que era un error de Javascript o problema de bucle, pero este programa que se ejecuta definitivamente fue hecho.

Aquí está un ejemplo de una pequeña página web que hace esto.Después de hacer clic en el botón y procesos, la throbber (gracias por Kooilinc para el término) sigue en marcha.

<!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>

Yo era capaz de detenerlo por pulsar el botón de stop (botón derecho y parada).

¿Qué tengo que hacer para conseguir Javascript para detener el procesamiento (o el navegador para que deje de procesamiento) después de que el script está hecho?

Nota 1:Esto ocurrió en FF4.01, no en IE o Chrome (para este ejemplo de código).

Note2:He probado la ventana.la función stop() después de la instrucción switch, y no se detuvo la throbber.

Como por Lekensteyn respuesta del documento.close() después de la instrucción switch resuelto este, pero este es un ejemplo de que no palpitan en todo y no utilizar el documento.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>
¿Fue útil?

Solución

Después de llamar a document.write(), usted debe llamar a document.close() si el documento fue previamente no se ha cerrado.

Básicamente, ocurre esto:

  1. La página es llegar analiza
  2. Los Scripts son procesados
  3. La página está "cerrado" (document.close())

Si document.write() se llama en el paso 2, estará terminado en el paso 3.Más allá del paso 3, si la llamada document.write, que va a abrir de nuevo la página, pero la página no se cierra en los FF (no estoy seguro acerca de los demás).Has de cerrar llamando document.close().

Esto lo descubrí cuando tenía que abrir una ventana y escribir en él rápidamente en FF.

var win = window.open();
win.document.write("something");
// the next line is required to finish the page
win.document.close();

Lo mismo se aplica a su 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top