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" 或其他任何内容。