我有一个javascript间隔(setInterval
)正在运行倒计时。要在特定时间停止此间隔,我使用clearInterval
。
当然,每个人都可以通过调用clearInterval
函数轻松清除此间隔。
所以我想知道,如何阻止用户手动停止计时器,但仍能自行停止计时器?
答案 0 :(得分:3)
虽然您可以捕获变量,但是您将setInterval
的返回值存储在闭包中,以便更难以检查用户是否仍然可以:
所以,简短的回答是你不能。用户浏览器中发生的事情最终由用户控制。
如果时间问题那么重要,那么以某种方式将服务器包含在其中。 (例如,通过要求服务器仅在一定时间后释放的数据)。
答案 1 :(得分:2)
您可以这样做:
(function() {
var _clearInterval = window.clearInterval;
window.clearInterval = function(interval) {
// _clearInterval(interval); // Uncomment to enable default behaviour.
};
})();
虽然这不是万无一失地阻止调用clearInterval
,但它会严重阻碍用户手动调用clearInterval
。
由于用户可以完全控制浏览器,除了重写浏览器javascript引擎之外,没有万无一失的方法可以做到这一点,当然这是不太可能的。
答案 2 :(得分:0)
我想说你最多可以通过添加一些作用域来尝试和混淆setInterval。
例如,您可以在JS中创建一个对象,并为该对象分配一个方法来启动间隔。人们仍然可以在控制台中清除Interval,但不知道间隔的范围。
E.g
myGlobalObject.intervalMethod.clearInterval(myInt);
这不是防弹 - 它只是让清除int有点困难,因为写clearInterval是不够的 - 你需要知道范围。但是,任何花时间阅读开发工具JS的人都能找到这个代码。