浏览器在某些Javascript文件上不断崩溃
首先,很抱歉英语不好,因为它不是我的主要语言 我在使用Javascript时遇到了一些问题。几分钟后,某个文件不断破坏我的浏览器(无论是Chrome、Firefox还是IE)浏览器在某些Javascript文件上不断崩溃,javascript,jquery,date,browser,Javascript,Jquery,Date,Browser,首先,很抱歉英语不好,因为它不是我的主要语言 我在使用Javascript时遇到了一些问题。几分钟后,某个文件不断破坏我的浏览器(无论是Chrome、Firefox还是IE) $().ready(function() { timeAgo(); }); function timeAgo() { $('time.time-ago').each(function() { //Get datetime from the attribute var ago = $(this).a
$().ready(function() {
timeAgo();
});
function timeAgo() {
$('time.time-ago').each(function() {
//Get datetime from the attribute
var ago = $(this).attr('datetime');
//Split it so we can convert it to a Date object as Firefox doesn't allow raw input
var spl = ago.split(' ');
var date = spl[0].split('-');
var time = spl[1].split(':');
//Convert to object
ago = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
//Get current date
var now = new Date();
//Calculate difference in days
var days = dayYear(now) - dayYear(ago);
if(days < 0) days += 365;
var out = '';
//Get the propper string
if(days > 0) {
if(days == 1) {
out = 'Gisteren';
}else if(days < 7) {
out = days +' dagen geleden';
}else if(days < 14) {
out = 'Een week geleden';
}else{
out = ago.toLocaleDateString('nl-nl',{day: "numeric",month: "short",year: "numeric"});
}
}else{
var dif = Math.round((now - ago)/1000);
if(dif < 10) {
out = 'Zojuist';
}else if(dif < 60) {
out = 'Enkele seconden geleden';
}else if(dif < 120) {
out = 'Een minuut geleden';
}else if(dif < 60 * 60) {
out = Math.floor(dif/60)+' minuten geleden';
}else if(dif < 60 * 60 * 2) {
out = 'Een uur geleden';
}else{
out = Math.floor(dif/60/60)+' uur geleden';
}
}
$(this).html(out);
});
setInterval(function(){timeAgo()},10000);
}
function dayYear(now) {
var first = new Date(now.getFullYear(),0,1);
var day = Math.round(((now - first) / 1000 / 60 / 60 /24) + 0.5);
return day;
}
$().ready(函数()){
时间();
});
函数timeAgo(){
$('time.time ago')。每个(函数(){
//从属性中获取datetime
var ago=$(this.attr('datetime');
//拆分它,以便我们可以将其转换为日期对象,因为Firefox不允许原始输入
var spl=前分割(“”);
var date=spl[0]。拆分('-');
var-time=spl[1]。拆分(“:”);
//转换为对象
ago=新日期(日期[0],日期[1]-1,日期[2],时间[0],时间[1],时间[2]);
//获取当前日期
var now=新日期();
//以天计算差额
var天数=日年(现在)-日年(以前);
如果(天<0)天+=365;
var out='';
//取支撑绳
如果(天数>0){
如果(天数==1){
out='Gisteren';
}否则,如果(天数<7天){
out=天+达根·格莱登;
}否则,如果(天数<14天){
out='Een week geleden';
}否则{
out=ago.toLocaleDateString('nl-nl',{day:“numeric”,month:“short”,year:“numeric”});
}
}否则{
var dif=数学轮((现在-以前)/1000);
如果(dif<10){
out=‘Zojuist’;
}否则如果(dif<60){
out='Enkele seconden geleden';
}否则如果(dif<120){
out='Een minut geleden';
}否则如果(dif<60*60){
out=数学楼层(dif/60)+“分钟geleden”;
}否则如果(dif<60*60*2){
out='Een uur geleden';
}否则{
out=数学楼层(dif/60/60)+“uur geleden”;
}
}
$(this).html(out);
});
setInterval(函数(){timeAgo()},10000);
}
功能日年(现在){
var first=新日期(现在是.getFullYear(),0,1);
var day=数学轮((现在为第一轮)/1000/60/60/24)+0.5);
回归日;
}
例如,我用下面的代码来调用它
<time datetime="2013-05-12 19:12:15"></time>
提前感谢。原因是您在每个循环中不断调用
setInterval
您应该改用setTimeout
(或者只调用setInterval
一次)
不同之处在于,setInterval
每x毫秒执行一次给定的。
setTimeout
在x毫秒(一次)后执行给定代码
由于在
timeAgo
方法中调用setInterval
,过一段时间后,您将运行大量计时器,所有新计时器和计时器的数量都将以指数形式增长,最终导致崩溃。原因是您在每个循环中不断调用setInterval
您应该改用setTimeout
(或者只调用setInterval
一次)
不同之处在于,setInterval
每x毫秒执行一次给定的。
setTimeout
在x毫秒(一次)后执行给定代码
由于在
timeAgo
方法中调用setInterval
,过一段时间后,您将运行大量计时器,所有新计时器和计时器的数量将成倍增长,最终导致崩溃。您确定此文件是罪魁祸首吗?我在Chrome 26上运行了你的代码,没有问题。你说“崩溃”浏览器是什么意思?发生了什么事让你觉得有问题?你确定这个文件是罪魁祸首吗?我在Chrome 26上运行了你的代码,没有问题。你说“崩溃”浏览器是什么意思?发生了什么事让你觉得出了问题?+1就是这样。每10秒运行计时器的数量呈指数级增长。每10秒运行计时器的数量呈指数级增长。