حلقة لا نهاية لها في JavaScript لا تؤدي إلى تحذير من المتصفح

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

  •  09-06-2019
  •  | 
  •  

سؤال

أعرض مجموعة من الصور كتراكب باستخدام خرائط Google.يجب أن يتم عرض هذه الصور في حلقة لا نهاية لها ولكن معظم المتصفحات تكتشف ذلك وتعرض تحذيرًا.

هل هناك طريقة لإنشاء حلقة لا نهاية لها في JavaScript حتى لا يتم إيقافها أو التحذير منها بواسطة المتصفح؟

هل كانت مفيدة؟

المحلول

يحاول setInterval أو setTimeout.

هنا مثال:

(show = (o) => setTimeout(() => {

  console.log(o)
  show(++o)

}, 1000))(1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

نصائح أخرى

يجب عليك استخدام مؤقت لجلب صور جديدة بشكل مستمر بدلاً من تكرار حلقة لا نهائية.افحص ال setTimeout() وظيفة.التحذير هو أنه يجب عليك استدعاؤها في دالة تستدعي نفسها، حتى تنتظر مرة أخرى.المثال مأخوذ من w3schools:

var c = 0
var t;

function timedCount() {
  document.getElementById('txt').value = c;
  c = c + 1;
  t = setTimeout("timedCount()", 1000);
}
<form>
  <input type="button" value="Start count!" onClick="timedCount()">
  <input type="text" id="txt">
</form>

سيقوم التعليمة البرمجية التالية بتعيين فاصل زمني وتعيين الصورة إلى الصورة التالية من مجموعة من مصادر الصور كل ثانية.

function setImage(){
  var Static = arguments.callee;
  Static.currentImage = (Static.currentImage || 0);
  var elm = document.getElementById("imageContainer");
  elm.src = imageArray[Static.currentImage++];
}
imageInterval = setInterval(setImage, 1000);

بدلاً من استخدام حلقة لا نهائية، قم بإنشاء مؤقت يستمر في التشغيل كل n ثانية - وستحصل على جانب "التشغيل إلى الأبد" دون توقف المتصفح.

ربما حاول استخدام مؤقت يقوم باسترداد الصورة التالية في كل مرة يتم تحديدها، ولسوء الحظ لا أعرف أي جافا سكريبت لذلك لا يمكنني تقديم نموذج رمز

إذا كان ذلك يناسب حالتك، يمكنك الاستمرار في تحميل صور جديدة للرد على تفاعل المستخدم، مثل هذا الموقع يفعل (فقط قم بالتمرير لأسفل).

مجرد إجابة رسمية:

var i = 0;

while (i < 1) {
   do something...

   if (i < 1) i = 0;
   else i = fooling_function(i);  // must return 0
}

أعتقد أنه لن يتمكن أي متصفح من اكتشاف مثل هذه الأشياء.

function foo() {
  alert('hi');
  setTimeout(foo, 5000);
}

ثم استخدم إجراءً مثل "onload" لبدء تشغيل "foo"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top