Javascript 段代码导致浏览器出现不可预测的崩溃
Piece of Javascript code causing unpredictable crashes in browsers
前段时间一位同事在开发环境中实现了一些代码,我们从未测试过并将其实现到生产环境中,但现在我们想要这样做。测试代码 在 Ubuntu 12.04 上使用 Chrome v43 或 Firefox v37 时我没有遇到任何问题,但是其他一些员工报告了问题。
有些用户的 tab/browser 挂在页面上然后崩溃,有些用户没有任何问题并且脚本按预期工作,就像我自己一样。在某些机器上,只有一个浏览器崩溃,而另一个可以正常工作。
我已经多次阅读了整个代码片段,但我无法确定其中哪些内容容易 crashes/hangups。
这里是 Javascript:
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
$(document).ready(function(){
$('a').click(function(){
var address = $(this).attr("href");
if(address == "/twiki-dev/view/TWiki/WelcomeGuest?logout=1"){
eraseCookie("MOD_AUTH_CAS_S");
}
});
});
var allCookies = document.cookie.split(";");
var newHref = "";
for(i=0; i<allCookies.length; i++) {
var cookie = allCookies[i].split("=");
var redirect = 0;
if(cookie[0].trim() === "MOD_AUTH_CAS_S") {
var hrefSplit = document.URL.split("/");
for(i=0; i<hrefSplit.length; i++) {
if(hrefSplit[i]=="view") {
if("TWikiGuest"=="%WIKINAME%") {
redirect = 1;
};
hrefSplit[i]="viewauth";
}
if(i == hrefSplit.length-1) newHref = hrefSplit[i];
else newHref = hrefSplit[i] + "/";
}
if(redirect ==1) {
document.getElementsByTagName('body')[0].style.display = "none";
window.location.href = newHref;
}
}
}
此处是否存在会导致问题的代码问题?
编辑:一个浏览器报告 var hrefSplit = document.URL.split("/");
是罪魁祸首,但我看不出有什么可能导致问题?
您在同一个循环内使用同一个局部变量 "i"。尝试将内部循环变量更改为 "j" 或其他任何内容。
前段时间一位同事在开发环境中实现了一些代码,我们从未测试过并将其实现到生产环境中,但现在我们想要这样做。测试代码 在 Ubuntu 12.04 上使用 Chrome v43 或 Firefox v37 时我没有遇到任何问题,但是其他一些员工报告了问题。
有些用户的 tab/browser 挂在页面上然后崩溃,有些用户没有任何问题并且脚本按预期工作,就像我自己一样。在某些机器上,只有一个浏览器崩溃,而另一个可以正常工作。
我已经多次阅读了整个代码片段,但我无法确定其中哪些内容容易 crashes/hangups。
这里是 Javascript:
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
$(document).ready(function(){
$('a').click(function(){
var address = $(this).attr("href");
if(address == "/twiki-dev/view/TWiki/WelcomeGuest?logout=1"){
eraseCookie("MOD_AUTH_CAS_S");
}
});
});
var allCookies = document.cookie.split(";");
var newHref = "";
for(i=0; i<allCookies.length; i++) {
var cookie = allCookies[i].split("=");
var redirect = 0;
if(cookie[0].trim() === "MOD_AUTH_CAS_S") {
var hrefSplit = document.URL.split("/");
for(i=0; i<hrefSplit.length; i++) {
if(hrefSplit[i]=="view") {
if("TWikiGuest"=="%WIKINAME%") {
redirect = 1;
};
hrefSplit[i]="viewauth";
}
if(i == hrefSplit.length-1) newHref = hrefSplit[i];
else newHref = hrefSplit[i] + "/";
}
if(redirect ==1) {
document.getElementsByTagName('body')[0].style.display = "none";
window.location.href = newHref;
}
}
}
此处是否存在会导致问题的代码问题?
编辑:一个浏览器报告 var hrefSplit = document.URL.split("/");
是罪魁祸首,但我看不出有什么可能导致问题?
您在同一个循环内使用同一个局部变量 "i"。尝试将内部循环变量更改为 "j" 或其他任何内容。