كيف يمكنك إيقاف المتصفح من "الساعة الرملية" عند الانتهاء من Javascript (إيقاف الخفقان)؟

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

  •  06-09-2020
  •  | 
  •  

سؤال

عند كتابة صفحة ويب HTML صغيرة تحتوي على بعض جافا سكريبت البسيطة جدًا، لاحظت أنه بعد الانتهاء من ذلك، أبقت الدائرة تدور (فايرفوكس).لقد رأيت ذلك عدة مرات على صفحات أخرى واعتقدت دائمًا أنه كان خطأ في 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>

لقد تمكنت من إيقافه عن طريق الضغط على زر التوقف (انقر بزر الماوس الأيمن ثم توقف).

ما الذي يجب علي فعله حتى يتوقف جافا سكريبت عن المعالجة (أو يتوقف المتصفح عن المعالجة) بعد انتهاء البرنامج النصي؟

ملاحظة 1:حدث هذا في FF4.01، وليس في IE أو Chrome (لنموذج التعليمات البرمجية هذا).

ملاحظة 2:لقد قمت بتجربة وظيفة window.stop() بعد بيان التبديل، ولم يوقف الخفقان.

وفقًا لإجابة Lekensteyn، document. Close() بعد أن قامت عبارة التبديل بحل هذه المشكلة، ولكن إليك مثالًا لم ينبض على الإطلاق ولا يستخدم 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>
هل كانت مفيدة؟

المحلول

بعد الاتصال 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top