Javascript js导致firefox崩溃

Javascript js导致firefox崩溃,javascript,firefox,crash,Javascript,Firefox,Crash,我为这个模糊的问题道歉,但我不知道如何更好地描述正在发生的事情 我正在开发一个web应用程序,到目前为止它是严格用js编码的(还没有服务器端代码)。我正在使用HTML5画布绘制一种布局图,其中包含点击事件、颜色编码和对象选择等 我开发这一功能完全是为了与Firefox配合使用(我使用的是moz特定的css内容和存储,我必须使用的IE版本不支持这些内容) 今天在做我的项目时,我开始体验到奇怪的行为。加载网页时,会出现一些内容(按钮、div等),然后Firefox会弹出一个对话框,说明“Firefo

我为这个模糊的问题道歉,但我不知道如何更好地描述正在发生的事情

我正在开发一个web应用程序,到目前为止它是严格用js编码的(还没有服务器端代码)。我正在使用HTML5画布绘制一种布局图,其中包含点击事件、颜色编码和对象选择等

我开发这一功能完全是为了与Firefox配合使用(我使用的是moz特定的css内容和存储,我必须使用的IE版本不支持这些内容)

今天在做我的项目时,我开始体验到奇怪的行为。加载网页时,会出现一些内容(按钮、div等),然后Firefox会弹出一个对话框,说明“Firefox已停止工作”,并询问我是否要“在线检查解决方案并关闭程序”或只是“关闭程序”。“进一步详细信息”窗格中包含以下内容:

我在代码中添加了一些警告语句,并将问题追溯到某个代码块。然而,如果我一步一步地通过该块(在for循环的每次迭代中都放入一条alert语句),代码就会按预期执行,Firefox不会崩溃。Firebug也没有发现代码有任何错误。如果我把警报拿走,Firefox会突然再次窒息

如果我将代码的这一部分分解出来,并通过单击按钮来运行它,那么代码也会正确执行,但是对于我的用户来说,必须单击按钮才能使其工作是不实际的

我需要帮助,弄清楚我应该集中精力解决这个问题

一些可能(我不知道)相关的事情:

我从大约12个不同的xml文档中加载数据,一个大到600KB,其余约20KB

我还导入了15个不同的js库——我可以潜在地减少这个数量,但功能在逻辑上在这些文件中被分解,因此如果我必须将它们连接在一起,那么开发起来会有点困难

我没有使用jQuery、MooTools或任何其他类似的库

有没有关于如何解决问题的想法

编辑:

下面是它死在上面的函数的代码。我没有发布实际代码的原因是,正如我所说,当代码本身没有与页面的其余代码一起运行时,它会正确执行。不过,如果有帮助的话,就在这里

function GetSeatPaths(Seats){
    // fills the SeatPath, ArmrestPath and SimpleSeatPath for the seat instance (used for cango drawing)

    for (var i =0; i<Seats.length; i++){
        var ThisSeat = Seats[i];

        var SeatPath = ThisSeat.SeatPath;

        //alert("SeatCollection.prototype.GetSeatPaths: " + i);

        if (typeof(SeatPath) === "undefined" || SeatPath == null){

            var Column = ThisSeat.Column;
            var Dims = ThisSeat.Dims;

            if (Column != "Left"){
                BL = -1;
            } else {
                BL = 1;
            }

            var SeatRad = 2;

            try{
                var seat_pax = parseInt(Dims.Seat_PAX); 
            } catch(err){
                var seat_pax = 3;
            }

            if (isNaN(seat_pax)){
                var seat_pax = 3;
            }

            //Make an armrest and cushion set var SeatRad = 2; //this is the radius of the seat cushions
            //alert("getSeatPaths");



            var CTS = 2.25;
            var TAR = 16;
            var CRP = 16.2;
            var BA = 18;
            var FOA = -2;
            var SBT2 = 23.2;
            var ACO = 45;

            if (Dims.hasOwnProperty('CTS')){
                CTS = parseFloat(Dims.CTS.Value);
            } 

            if (Dims.hasOwnProperty('TAR')){
                TAR = parseFloat(Dims.TAR.Value);
            } 

            if (Dims.hasOwnProperty('CRP')){
                CRP = parseFloat(Dims.CRP.Value);
            } 

            if (Dims.hasOwnProperty('BA')){
                BA = parseFloat(Dims.BA.Value);
            } 

            if (Dims.hasOwnProperty('FOA')){
                FOA = parseFloat(Dims.FOA.Value);
            } 

            if (Dims.hasOwnProperty('SBT2')){
                SBT2 = parseFloat(Dims.SBT2.Value);
            } 

            if (Dims.hasOwnProperty('ACO')){
                ACO = parseFloat(Dims.ACO.Value);
            } 

            SeatGeometryArr = [];
            ArmrestGeometryArr = [];

            var SeatOffset = 0
            for (var j=0; j<seat_pax; j++){
                var CW = 17;
                var q = 4;

                if (Dims.hasOwnProperty('CW' + (j+1))){
                    CW = parseFloat(Dims['CW' + (j+1)].Value);
                }

                if (Dims.hasOwnProperty('q' + (j+1))){
                    CW = parseFloat(Dims['q' + (j+1)].Value);
                }

                SeatGeometryArr.push(['M',-CTS+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,-CTS,-TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',-CTS,-TAR+q/2+CW-q/2-SeatRad + q/2 + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,-CTS+SeatRad,-TAR+CW+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',CRP-SeatRad, -TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP, -TAR+q/2+CW-SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',CRP, -TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP-SeatRad, -TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',-CTS+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['Z']);

                SeatGeometryArr.push(['M',CRP+SeatRad,-TAR+q/2 + SeatOffset]); 
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP,-TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',CRP,-TAR+q/2+CW-SeatRad + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, CRP+SeatRad, -TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['L',SBT2 - SeatRad ,-TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, SBT2, -TAR + q/2 + CW - SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',SBT2,-TAR + q/2 + SeatRad+ SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, SBT2 - SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',CRP+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['Z']);
                SeatOffset += CW;
            }
            //alert("Out of Cushions");
            var SeatPath = FlipGeoArr(SeatGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            // Create Armrest Geometry
            ArmrestGeometryArr = [];
            SeatOffset = 0
            for (var j=0; j<seat_pax+1; j++){
                var CW = 17;
                var q = 4;

                if (Dims.hasOwnProperty('CW' + (j+1))){
                    CW = parseFloat(Dims['CW' + (j+1)].Value);
                }

                if (Dims.hasOwnProperty('q' + (j+1))){
                    CW = parseFloat(Dims['q' + (j+1)].Value);
                }

                ArmrestGeometryArr.push(['M',-FOA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['L',-FOA,-TAR+q + SeatOffset]);
                ArmrestGeometryArr.push(['L',BA,-TAR+q + SeatOffset]);
                ArmrestGeometryArr.push(['L',BA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['L',-FOA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['Z']);
                SeatOffset += CW;
            }
            //alert("Out of Armrests");
            var ArmrestPath = FlipGeoArr(ArmrestGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            //alert("Into Simple");
            // create geometry for the simplified seat
            SimpleSeatGeometryArr = [];
            SimpleSeatGeometryArr.push(['M',-CTS,-TAR]);
            SimpleSeatGeometryArr.push(['L',-CTS,ACO]);
            SimpleSeatGeometryArr.push(['L',SBT2,ACO]);
            SimpleSeatGeometryArr.push(['L',SBT2,-TAR]);
            SimpleSeatGeometryArr.push(['Z']);
            //alert("Out of Simple");
            var SimpleSeatPath = FlipGeoArr(SimpleSeatGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            // stick these values in for all seat instances with this part number
            for (var j=0; j<Seats.length; j++){
                if (Seats[j].PartNumber == Seats[i].PartNumber){
                    Seats[j].SeatPath = SeatPath;
                    Seats[j].ArmrestPath = ArmrestPath;
                    Seats[j].SimpleSeatPath = SimpleSeatPath;
                }
            }

        }
    }
}
功能GetSeatPath(座椅){
//填充座椅实例的座椅路径、扶手路径和SimpleSeatPath(用于cango图形)

对于(var i=0;iYou说你把问题缩小到了一块代码…发布。竞态条件…?JS代码可能运行得太早了。你是否尝试排除插件问题?如果它是可复制的,你能用一个独立的测试用例或链接在上报告吗?@jahroy:很抱歉没有发布代码——就像我说的,代码本身看起来很好独立运行。我把它添加到上面的问题中只是为了以防万一。@MattCoughlin:当浏览器的第一个症状是死亡时,如何确定它是否是一种竞赛状态?
function GetSeatPaths(Seats){
    // fills the SeatPath, ArmrestPath and SimpleSeatPath for the seat instance (used for cango drawing)

    for (var i =0; i<Seats.length; i++){
        var ThisSeat = Seats[i];

        var SeatPath = ThisSeat.SeatPath;

        //alert("SeatCollection.prototype.GetSeatPaths: " + i);

        if (typeof(SeatPath) === "undefined" || SeatPath == null){

            var Column = ThisSeat.Column;
            var Dims = ThisSeat.Dims;

            if (Column != "Left"){
                BL = -1;
            } else {
                BL = 1;
            }

            var SeatRad = 2;

            try{
                var seat_pax = parseInt(Dims.Seat_PAX); 
            } catch(err){
                var seat_pax = 3;
            }

            if (isNaN(seat_pax)){
                var seat_pax = 3;
            }

            //Make an armrest and cushion set var SeatRad = 2; //this is the radius of the seat cushions
            //alert("getSeatPaths");



            var CTS = 2.25;
            var TAR = 16;
            var CRP = 16.2;
            var BA = 18;
            var FOA = -2;
            var SBT2 = 23.2;
            var ACO = 45;

            if (Dims.hasOwnProperty('CTS')){
                CTS = parseFloat(Dims.CTS.Value);
            } 

            if (Dims.hasOwnProperty('TAR')){
                TAR = parseFloat(Dims.TAR.Value);
            } 

            if (Dims.hasOwnProperty('CRP')){
                CRP = parseFloat(Dims.CRP.Value);
            } 

            if (Dims.hasOwnProperty('BA')){
                BA = parseFloat(Dims.BA.Value);
            } 

            if (Dims.hasOwnProperty('FOA')){
                FOA = parseFloat(Dims.FOA.Value);
            } 

            if (Dims.hasOwnProperty('SBT2')){
                SBT2 = parseFloat(Dims.SBT2.Value);
            } 

            if (Dims.hasOwnProperty('ACO')){
                ACO = parseFloat(Dims.ACO.Value);
            } 

            SeatGeometryArr = [];
            ArmrestGeometryArr = [];

            var SeatOffset = 0
            for (var j=0; j<seat_pax; j++){
                var CW = 17;
                var q = 4;

                if (Dims.hasOwnProperty('CW' + (j+1))){
                    CW = parseFloat(Dims['CW' + (j+1)].Value);
                }

                if (Dims.hasOwnProperty('q' + (j+1))){
                    CW = parseFloat(Dims['q' + (j+1)].Value);
                }

                SeatGeometryArr.push(['M',-CTS+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,-CTS,-TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',-CTS,-TAR+q/2+CW-q/2-SeatRad + q/2 + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,-CTS+SeatRad,-TAR+CW+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',CRP-SeatRad, -TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP, -TAR+q/2+CW-SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',CRP, -TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP-SeatRad, -TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',-CTS+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['Z']);

                SeatGeometryArr.push(['M',CRP+SeatRad,-TAR+q/2 + SeatOffset]); 
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1,CRP,-TAR+q/2+SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',CRP,-TAR+q/2+CW-SeatRad + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, CRP+SeatRad, -TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['L',SBT2 - SeatRad ,-TAR+q/2+CW + SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, SBT2, -TAR + q/2 + CW - SeatRad + SeatOffset]);
                SeatGeometryArr.push(['L',SBT2,-TAR + q/2 + SeatRad+ SeatOffset]);
                SeatGeometryArr.push(['A',SeatRad,SeatRad,0,0,1, SBT2 - SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['L',CRP+SeatRad,-TAR+q/2 + SeatOffset]);
                SeatGeometryArr.push(['Z']);
                SeatOffset += CW;
            }
            //alert("Out of Cushions");
            var SeatPath = FlipGeoArr(SeatGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            // Create Armrest Geometry
            ArmrestGeometryArr = [];
            SeatOffset = 0
            for (var j=0; j<seat_pax+1; j++){
                var CW = 17;
                var q = 4;

                if (Dims.hasOwnProperty('CW' + (j+1))){
                    CW = parseFloat(Dims['CW' + (j+1)].Value);
                }

                if (Dims.hasOwnProperty('q' + (j+1))){
                    CW = parseFloat(Dims['q' + (j+1)].Value);
                }

                ArmrestGeometryArr.push(['M',-FOA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['L',-FOA,-TAR+q + SeatOffset]);
                ArmrestGeometryArr.push(['L',BA,-TAR+q + SeatOffset]);
                ArmrestGeometryArr.push(['L',BA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['L',-FOA,-TAR + SeatOffset]);
                ArmrestGeometryArr.push(['Z']);
                SeatOffset += CW;
            }
            //alert("Out of Armrests");
            var ArmrestPath = FlipGeoArr(ArmrestGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            //alert("Into Simple");
            // create geometry for the simplified seat
            SimpleSeatGeometryArr = [];
            SimpleSeatGeometryArr.push(['M',-CTS,-TAR]);
            SimpleSeatGeometryArr.push(['L',-CTS,ACO]);
            SimpleSeatGeometryArr.push(['L',SBT2,ACO]);
            SimpleSeatGeometryArr.push(['L',SBT2,-TAR]);
            SimpleSeatGeometryArr.push(['Z']);
            //alert("Out of Simple");
            var SimpleSeatPath = FlipGeoArr(SimpleSeatGeometryArr,-BL); // Note: BL is flipped here because the geometry for the seat is defined for a RH seat

            // stick these values in for all seat instances with this part number
            for (var j=0; j<Seats.length; j++){
                if (Seats[j].PartNumber == Seats[i].PartNumber){
                    Seats[j].SeatPath = SeatPath;
                    Seats[j].ArmrestPath = ArmrestPath;
                    Seats[j].SimpleSeatPath = SimpleSeatPath;
                }
            }

        }
    }
}