我每隔100ms使用setInterval刷新一次时钟显示,但在某些时候它会停止运行。
当我启动我的脚本时,它工作正常,但之后,时钟不再更新。我没有任何线索为什么和调试似乎很困难,这是在几十分钟后随机发生的。
我在另一个网页上运行脚本作为用户脚本,可能是相关的,或者可能出现了问题,比如某个停止我的脚本的非捕获异常,但到目前为止我在控制台中没有看到任何内容。 ..
我正在考虑使用SetTimeout调用自己,但我之前想问一下,也许你有一些很好的建议来调试或理解这个问题。
setInterval(function(){
app.displayClock();
}, app.ensureMinMax(app.settings('CLOCK_DELAY_REFRESH'), 0, 1000));
函数调用:
/**
* Display/refresh the displayed clock.
*/
app.displayClock = function(){
app.waitForDOM(function(){
var id = '__shared_clock';
var idTime = '__shared_clock_text';
var idForm = '__shared_clock_form';
var $selector = $j('#container-top');
if($selector.has('#'+id).length){
// Retrieve existing element.
$selector.has('#'+id).find('#'+idTime).html(app._getTime(
true,
parseInt($selector.find('#'+idForm).find('#__shared_clock_form_hours').val()),
parseInt($selector.find('#'+idForm).find('#__shared_clock_form_minutes').val()),
parseInt($selector.find('#'+idForm).find('#__shared_clock_form_seconds').val())
));
}else{
// Create main container, sub containers and bind events.
$selector.append($j('<div/>', {
id: id
}));
if(app.settings('DISPLAY_CLOCK_CALCULATOR')) {
// Create area that contains a form.
$selector.find('#' + id).append($j('<div/>', {
id: idForm,
html:// Inverse the order because there are floating!
'<input type="text" id="__shared_clock_form_seconds" size="3" style="float: right;color: whitesmoke;" tabindex="10002" placeholder="Sec" />'+
'<input type="text" id="__shared_clock_form_minutes" size="3" style="float: right;color: whitesmoke;" tabindex="10001" placeholder="Min" />'+
'<input type="text" id="__shared_clock_form_hours" size="3" style="float: right;color: whitesmoke;" tabindex="10000" placeholder="Hour" />'
}));
}
// Create area that contains the time value.
$selector.find('#'+id).append($j('<div/>', {
id: idTime,
style: 'float: right; margin-top: 8px; padding-right: 10px;',
html: app._getTime()
}));
}
});
};
代码非常大并且使用我不共享的功能,因为它们也很大并且使用功能......
基本上,setInterval调用是在主脚本中进行的。 waitForDom确保在加载DOM之前尝试更改它,不,使用通常的jQuery等待dom在这里不起作用。