Как вы останавливаете браузер от "песочных часов", когда Javascript ГОТОВО (остановите троббер)?

Написав небольшую HTML-страницу с очень простым Javascript, я заметил, что после того, как это было сделано, круг продолжал вращаться (firefox). Я видел это много раз на других страницах и всегда думал, что это ошибка Javascript или проблема с циклом, но эта программа, которую я запускал, была точно завершена.

Вот один пример небольшой веб-страницы, которая делает это. После того, как вы нажмете кнопку, и она начнет работать, пульсатор (спасибо за Kooilinc за термин) продолжает работать.

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

Я смог остановить его, нажав "стоп" (щелчок правой кнопкой мыши и остановка).

Что мне нужно сделать, чтобы Javascript прекратил обработку (или браузер прекратил обработку) после завершения сценария?

Примечание 1: Это произошло в FF4.01, а не в IE или Chrome (для этого примера кода).

Примечание 2: я попробовал функцию window.stop() после оператора switch, и он не остановил пульсатор.

Согласно ответу Лекенштейна, document.close() после оператора switch решил эту проблему, но вот пример, который вообще не пульсирует и не использует 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>

1 ответ

Решение

После звонка document.write()Вы должны позвонить document.close() если документ ранее не был закрыт.

В основном это происходит:

  1. Страница анализируется
  2. Скрипты обрабатываются
  3. Страница закрыта (document.close())

Если document.write() вызывается на шаге 2, он будет завершен на шаге 3. Помимо шага 3, если вы позвоните document.write, вы открываете страницу снова, но страница не закрывается в FF (не уверена в других). Вы должны закрыть его, позвонив document.close(),

Я обнаружил это, когда мне нужно было открыть окно и быстро написать в FF.

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

То же относится и к вашему делу:

<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>
Другие вопросы по тегам