javascript - 我如何执行此行一次?

标签 javascript google-chrome-extension

我在这里得到了这一行,我真的很难执行一次离线部分。

当用户在线时,它会显示一次。没关系。但是,当用户离线时,控制台中每 10 秒就会显示 --- 已离线。我只希望它在用户离线时显示离线,然后停止,直到再次在线。请在这里帮助我。

window.setInterval(function() {
  if (document.getElementById('statusIndexer') == null)
    return;
  for (var i = 0; i < WLAPStore.Presence.models.length; i++) {
    var m = WLAPStore.Presence.models[i];
    var id = 'p' + m.id.slice(0, -5);
    var clientBox = document.getElementById(id);
    if (clientBox !== null) {
      var img = clientBox.getElementsByTagName('img')[0];
      img.classList.remove('isOnline');
      if (m.isOnline) {
        console.log(id + ' is online');
        clientBox.parentNode.prepend(clientBox);
        img.classList.remove('isOffline');
        img.classList.add('isOnline');
      } else {
        console.log(id + ' is offline');
        clientBox.parentNode.prepend(clientBox);
        img.classList.remove('isOnline');
        img.classList.add('isOffline');
        (document.getElementById('statusIndexer') == null)
        return;
      }
    }
  }
}, 1000);

最佳答案

使用全局变量来保存之前的状态,并在记录消息之前检查它是否发生变化。

var onlineState = {};

window.setInterval(function() {
  if (document.getElementById('statusIndexer') == null)
    return;
  for (var i = 0; i < WLAPStore.Presence.models.length; i++) {
    var m = WLAPStore.Presence.models[i];
    var id = 'p' + m.id.slice(0, -5);
    var clientBox = document.getElementById(id);
    if (clientBox !== null) {
      var img = clientBox.getElementsByTagName('img')[0];
      img.classList.remove('isOnline');
      if (m.isOnline) {
        if (m.isOnline !== onlineState[id]) {
          console.log(id + ' is online');
        }
        clientBox.parentNode.prepend(clientBox);
        img.classList.remove('isOffline');
        img.classList.add('isOnline');
      } else {
        if (m.isOnline !== onlineState[id]) {
          console.log(id + ' is offline');
        }
        clientBox.parentNode.prepend(clientBox);
        img.classList.remove('isOnline');
        img.classList.add('isOffline');
        (document.getElementById('statusIndexer') == null)
        return;
      }
      onlineState[id] = m.isOnline;
    }

  }
}, 1000);

关于javascript - 我如何执行此行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406989/

相关文章:

javascript - 设置cookie并自动登录

javascript - 如何使用 JavaScript 获取没有 id 的输入值?

javascript - 如何在页面开始加载之前将参数附加到 URL?

javascript - 如何动态设置 md-autocomplete 的必填字段

javascript - 如何将函数发送给父级,然后在子级中使用它?

jquery - IndexOf 和数组 - 优化此 jQuery 代码的最佳方法是什么?

google-chrome-extension - 使用 Chrome 扩展程序创建始终存在的侧边栏

javascript - 如何通过chrome扩展检测按钮事件

javascript - 如何创建与其他对象类型相同的新对象

javascript - 自动页面刷新后点击功能不起作用