在后台运行代码,同时显示警报

Run code in the background while alert is shown

本文关键字:显示 后台 运行 代码      更新时间:2023-09-26

这是我的片段。

$(function() {
  setCountDown(0, 1, 0);
  a = Array();
  $(window).bind('beforeunload', function() {
    if (a['endTime']) {
      return ("You are in the middle of a test");
    }
  });
});
function setCountDown(hours, minutes, seconds) {
  $(".timer").removeClass("common_displayNone");
  timerInterval = setInterval(
    function() {
      if (hours.toString().length == 1) {
        hours = "0" + hours;
      }
      if (minutes.toString().length == 1) {
        minutes = "0" + minutes;
      }
      if (seconds.toString().length == 1) {
        seconds = "0" + seconds;
      }
      if (seconds > 0) {
        seconds--;
        if (seconds.toString().length == 1) {
          seconds = "0" + seconds;
        }
      } else if (seconds == 0 && (minutes > 0)) {
        minutes = minutes - 1;
        seconds = 59;
      } else if (minutes == 0 && (hours > 0)) {
        hours = hours - 1;
        minutes = 59;
      }
      if (hours == 0 && minutes == 0 && seconds == 0) {
        clearInterval(timerInterval);
        a.removeItem("endTime");
      }
      $("#timer").html(hours + ":" + minutes + ":" + seconds);
      a['endTime'] = (hours * 3600 + minutes * 60 + seconds);
    }, 1000);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="timer"></div>

只需尝试重新加载页面即可。您将收到警报。在该警报期间,我的计时器未运行。因此,用户可以进行作弊测试。如何解决这个问题?

怕这就是alert的工作方式。它阻止了JavaScript运行的单线程,等待输入。我建议以其他方式发出警报。它不仅是非阻塞的,而且您还可以使用 CSS 对实际的警报框进行样式化。

Javascript是一种单线程语言,这意味着你不能让代码在"后台"上运行。当javascript提示警报窗口时,它会等待用户单击"确定"。

如果你真的想要弹出窗口,你必须用HTML和CSS来做。

如果你担心作弊,我建议处理用户在测试服务器端的时间,因为用户仍然可以编辑你的javascript,让自己花更多的时间。您可以使用 websocket 或轮询来实现此目的。

JavaScript通常被认为具有单个执行线程 对脚本(*)可见,以便当您的内联脚本、事件侦听器 或输入超时,您保持完全控制,直到您 从块或函数的末尾返回。