一段Javascript代码导致浏览器出现不可预测的崩溃

时间:2015-06-04 19:09:44

标签: javascript crash cross-browser

有一些代码,一个同事在开发环境中实现了一段时间,我们从未对其进行测试和实施,但现在我们想要这样做。测试代码我在Ubuntu 12.04上使用Chrome v43或Firefox v37时没有任何问题,但是其他一些工作人员正在报告问题。

有些用户将标签/浏览器挂在页面上然后崩溃,有些用户没有任何问题,脚本按照预期工作,就像我一样。在某些机器上只有一个浏览器崩溃,而另一个浏览器正在运行。

我已多次阅读整个代码段,但我无法确定其中容易出现崩溃/挂断的内容。

这是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("/");是罪魁祸首,但我看不出可能导致问题的原因?

1 个答案:

答案 0 :(得分:1)

您正在使用相同的本地变量&#34; i&#34;在同一个循环里面。尝试将内部循环变量更改为&#34; j&#34;或者其他什么。