防止用户手动调用 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 的人都能够找到这段代码。
我有一个 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 的人都能够找到这段代码。