当用户使用 JavaScript 和 HTML5 Web Worker 处于非活动状态时触发 AJAX 请求

Trigger AJAX request when user is inactive using JavaScript and HTML5 Web Workers

我正在开发一个聊天系统,只要用户在一定时间内处于非活动状态,它就会触发 AJAX 请求。我试图仅在 JavaScript 中解决它,但每当用户激活时尝试设置非活动时钟时总是失败。有什么办法可以实现这个功能吗?

作为一个可能的选择,我确定了 HTML5 Web Workers。但是创建的工作人员无法 访问 DOM 我需要做的来处理 AJAX 请求的响应。为了绕过这个,worker 可以 post 向主线程发送某种消息,但在那里我完全失去了概述。


目前,我有三个相关的代码元素应该能够相互交互。

启动非活动时钟当用户处于非活动状态时启动,应该在一段时间后触发 AJAX 请求,但应该能够被停止停止非活动时钟功能):

function startInactiveClock() {
   var waitingTime;
   var waitStart = performance.now();
   // waiting time limit set to 30 seconds
   while (waitingTime < 30000) {
      // unfortunately kills the web browser           
      waitingTime = performance.now - waitBegin;
   }
   triggerAJAXRequest();
}

触发AJAX请求应该可以访问DOM):

function triggerAJAXRequest() {
   $.ajax({
      ...
      success: function(data, status, xhttp) {
         response = data;
         var newChatMessage = '<div class="ChatMessage">' + response + '</div>';
         $("#chatHistory").prepend(newChatMessage);
      },
      ...
   });
   $("#userInputTxt").focus();
}

停止非活动时钟在用户活动时启动,应该可以停止启动非活动时钟功能):

function stopInactiveClock() {
   // do something to stop the inactive function counter
}

您应该改用 window.setTimeout

所以你可以在达到非活跃期时开始超时,然后在超时内再次检查,以确保用户已处于非活跃状态,然后触发 ajax 功能。