防止用户手动调用 clearInterval

Prevent user from calling clearInterval manually

我有一个 javascript 间隔 (setInterval) 运行 进行倒计时。要在特定时间停止此间隔,我使用 clearInterval。 当然大家可以很方便的自己清除这个区间,调用clearInterval函数

所以我想知道,如何防止用户手动停止计时器,但仍然能够自己停止计时器?

虽然您可以捕获变量,但您可以将 setInterval 的 return 值存储在闭包中以使其更难检查用户,但仍然可以:

  • 通过调试器访问它
  • 猜猜值(只是一个整数)

所以,简短的回答是你不能。用户浏览器中发生的事情最终都在用户的控制之下。

如果时间很重要,那么请以某种方式让服务器参与进来。 (例如,通过要求服务器仅在一定时间后才释放的数据)。

你可以这样做:

(function() {
  var _clearInterval = window.clearInterval;
    window.clearInterval = function(interval) {
      // _clearInterval(interval);  // Uncomment to enable default behaviour.
  };
})();

虽然这并不是调用 clearInterval 的万无一失的预防措施,但它显着地为用户手动调用 clearInterval 设置了障碍。

由于用户完全控制浏览器,因此除了重写浏览器 javascript 引擎之外,没有万无一失的方法来做到这一点,当然你不太可能做到。

我想说您最多可以尝试通过向其添加一些范围来混淆 setInterval。

例如,您可以在 JS 中创建一个对象,并为该对象分配一个方法来启动间隔。人们仍然可以在控制台中清除间隔,但不能不知道间隔的范围。

myGlobalObject.intervalMethod.clearInterval(myInt);

这不是防弹的 - 它只是让清除 int 变得有点困难,因为编写 clearInterval 是不够的 - 你需要知道范围。但是任何花时间在开发工具中阅读您的 JS 的人都能够找到这段代码。