假设有人(邪恶)为我们设置了一个计时器setInterval,但是我们不知道它的ID(我们没有对该对象的引用,setInterval正在返回,也没有它的值)
(function(){
setInterval(function(){console.log('pwned')},
10000)
})();
Run Code Online (Sandbox Code Playgroud)
有办法,如何清除它?是否有可能以其他方式访问计时器?或者至少特别是浏览器/ javascript引擎?
大卫·弗拉纳根(David Flanagan)接触了他的大型JSTDG.
setInterval() method, use in malicious code索引中的键指向
...某些浏览器会检测重复的对话框和长时间运行的脚本,并为用户提供停止它们的选项.但是恶意代码可以使用setInterval()等方法来加载CPU,也可以通过分配大量内存来攻击你的系统.Web浏览器没有一般的方法可以阻止这种火腿攻击.在实践中,这不是Web上的常见问题,因为没有人返回到从事此类脚本滥用的网站!
我有一个简单的幻灯片,我在客户的主页上制作,使用setInterval来计算旋转时间.
为防止浏览器在页面未对焦(正在查看另一个选项卡或其他程序)时搞砸setInterval,我正在使用:
function onBlur() {
clearInterval(play);
};
function onFocus() {
mySlideRotateFunction();
};
if (/*@cc_on!@*/false) {
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else {
window.onfocus = onFocus;
window.onblur = onBlur;
}
Run Code Online (Sandbox Code Playgroud)
mySlideRotateFunction设置setInterval并运行一些jQuery.虽然这在大多数情况下是有效的,但我发现,有时看起来似乎onBlur还没有运行,当我回到页面时,时间已经"积累"并且旋转变得疯狂.
我无法确定为什么有时会发生这种情况的原因,而不是其他原因.
我的问题 - 我的代码存在问题,当浏览器窗口失焦时,是否有人有更好的建议'暂停'setInterval?
谢谢
我想通过使用setInterval()每隔10分钟调用一个函数,并且在这个函数中我想使用从Angular 2的Dependency Injector获得的Service(称为auth),问题是控制台告诉我以下内容:
EXCEPTION:TypeError:this.auth未定义
constructor(private auth: AuthService){
setInterval(function(){ this.auth.refreshToken(); }, 1000 * 60 * 10);
}
Run Code Online (Sandbox Code Playgroud) 我最近发布了一个关于如何推迟在Python中执行函数的问题(类似于Javascript setTimeout),结果证明这是一个简单的任务threading.Timer(好吧,只要函数不与其他代码共享状态,但这会在任何事件驱动的环境中产生问题).
现在我想做得更好并效仿setInterval.对于那些不熟悉Javascript的人,setInterval允许每隔x秒重复一次对函数的调用,而不会阻止其他代码的执行.我创建了这个示例装饰器:
import time, threading
def setInterval(interval, times = -1):
# This will be the actual decorator,
# with fixed interval and times parameter
def outer_wrap(function):
# This will be the function to be
# called
def wrap(*args, **kwargs):
# This is another function to be executed
# in a different thread to simulate setInterval
def inner_wrap():
i = 0
while i != times:
time.sleep(interval)
function(*args, **kwargs)
i += 1 …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我发现了一些使用setInterval0毫秒的JavaScript代码,如下所示:
self.setInterval("myFunction()",0);
Run Code Online (Sandbox Code Playgroud)
显然,这对我来说似乎不是一个好主意.谁能告诉我setInterval这里的行为会是什么?("myFunction"对服务器进行AJAX调用)
我问这个是因为我的申请表现不正常.90%的情况下,应用程序运行正常,并且只对服务器进行一次调用.但有时会对服务器进行多次调用(到目前为止,最多只有48次调用),我几乎可以肯定这是这行代码的错误.
我需要每24小时在Node.js中运行代码.我遇到了一个叫做的函数setTimeout.以下是我的代码段
var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var data='<?xml version="1.0"?><entries><entry><TenantId>12345</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID><EventType>create</EventType><category term="monitoring.entity.create"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry><entry><TenantId>44445</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-fffffffff000</UsageID><EventType>update</EventType><category term="monitoring.entity.update"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:40:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry></entries>'
etree = et.parse(data);
var t = process.hrtime();
// [ 1800216, 927643717 ]
setTimeout(function () {
t = process.hrtime(t);
// [ 1, 6962306 ]
console.log(etree.findall('./entry/TenantId').length); // 2
console.log('benchmark took %d seconds and %d nanoseconds', t[0], t[1]);
//benchmark took 1 seconds and …Run Code Online (Sandbox Code Playgroud) 我正在使用JavaScript/Jquery使用数据库中的值进行页面自动更新,尽管它似乎没有在Internet Explorer中更新.它在FireFox和Chrome中运行良好.任何人都可以解释什么是错的吗?看起来IE只是显示页面的缓存版本.我怎样才能防止这种情况发生?谢谢.
function updateComm() {
var url="commandSys.php";
jQuery("#theElement").load(url);
}
setInterval("updateComm()", 1000);
Run Code Online (Sandbox Code Playgroud) 我使用以下代码在Firefox 15和Chrome 21上遇到问题:
setInterval(function () { console.log('test') }, 300000000000)
Run Code Online (Sandbox Code Playgroud)
在两个浏览器上,该功能立即运行重复非常快.当然,这是一个很大的数字(代表从现在开始大约10年),但我不认为它被视为微小或负数.我没有看到任何文档中允许的最大延迟.有谁知道是否有标准的最大值,或者这只是浏览器有趣吗?
适用于HTML5游戏,适用于移动设备的画布动画.
我面临一些性能问题,这些问题会影响每个设备与其他设备之间的速度.
requestAnimationFrame根据设备速度加快游戏动画.
setInterval震惊了我,从设备到另一个设备有一个延迟.
setTimeout在画布上绘图也很慢.
曾有过移动HTML5游戏经验的人可以指导我在其他三个(或其他技术,如果可用的话)中使用最佳方式在不同的移动设备上稳定地开发动画?
我有一个节点脚本,它应该利用单个节点进程可以获得的所有CPU资源.但我发现setInterval太慢了.
当然,我在文档中发现了这一点:
当延迟大于2147483647或小于1时,延迟将设置为1.
来源:https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args
现在我想知道是否有办法进一步减少限制,或者是否有可以使用的替代功能.
我不能只使用普通循环,因为还有其他需要同时运行的异步事件.
编辑:
再次:我不能只使用普通循环,因为还有其他需要同时运行的异步事件.我不确定为什么这么难理解.
正常循环正在运行时,您将阻止其他所有操作的执行.如果将循环放在另一个异步执行的函数中并不重要.
这是什么意思?
我们来看一些例子:
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
while (true) {
// do whatever
}
Run Code Online (Sandbox Code Playgroud)
这段代码会做什么?它会阻止一切.console.log('a')不会连续执行.
setInterval(()=>{console.log('a')},1000) // asynchronous thing that needs to run in the background
setTimeout(()=>{
while (true) {
// do whatever
}
}, 1)
Run Code Online (Sandbox Code Playgroud)
一旦while循环开始,这也将阻止间隔的执行.
setinterval ×10
javascript ×6
jquery ×2
node.js ×2
settimeout ×2
angular ×1
canvas ×1
html5 ×1
loops ×1
onblur ×1
python ×1
refresh ×1
timer ×1
typescript ×1