Javascript js导致firefox崩溃
我为这个模糊的问题道歉,但我不知道如何更好地描述正在发生的事情 我正在开发一个web应用程序,到目前为止它是严格用js编码的(还没有服务器端代码)。我正在使用HTML5画布绘制一种布局图,其中包含点击事件、颜色编码和对象选择等 我开发这一功能完全是为了与Firefox配合使用(我使用的是moz特定的css内容和存储,我必须使用的IE版本不支持这些内容) 今天在做我的项目时,我开始体验到奇怪的行为。加载网页时,会出现一些内容(按钮、div等),然后Firefox会弹出一个对话框,说明“Firefox已停止工作”,并询问我是否要“在线检查解决方案并关闭程序”或只是“关闭程序”。“进一步详细信息”窗格中包含以下内容: 我在代码中添加了一些警告语句,并将问题追溯到某个代码块。然而,如果我一步一步地通过该块(在for循环的每次迭代中都放入一条alert语句),代码就会按预期执行,Firefox不会崩溃。Firebug也没有发现代码有任何错误。如果我把警报拿走,Firefox会突然再次窒息 如果我将代码的这一部分分解出来,并通过单击按钮来运行它,那么代码也会正确执行,但是对于我的用户来说,必须单击按钮才能使其工作是不实际的 我需要帮助,弄清楚我应该集中精力解决这个问题 一些可能(我不知道)相关的事情: 我从大约12个不同的xml文档中加载数据,一个大到600KB,其余约20KB 我还导入了15个不同的js库——我可以潜在地减少这个数量,但功能在逻辑上在这些文件中被分解,因此如果我必须将它们连接在一起,那么开发起来会有点困难 我没有使用jQuery、MooTools或任何其他类似的库 有没有关于如何解决问题的想法 编辑: 下面是它死在上面的函数的代码。我没有发布实际代码的原因是,正如我所说,当代码本身没有与页面的其余代码一起运行时,它会正确执行。不过,如果有帮助的话,就在这里Javascript js导致firefox崩溃,javascript,firefox,crash,Javascript,Firefox,Crash,我为这个模糊的问题道歉,但我不知道如何更好地描述正在发生的事情 我正在开发一个web应用程序,到目前为止它是严格用js编码的(还没有服务器端代码)。我正在使用HTML5画布绘制一种布局图,其中包含点击事件、颜色编码和对象选择等 我开发这一功能完全是为了与Firefox配合使用(我使用的是moz特定的css内容和存储,我必须使用的IE版本不支持这些内容) 今天在做我的项目时,我开始体验到奇怪的行为。加载网页时,会出现一些内容(按钮、div等),然后Firefox会弹出一个对话框,说明“Firefo
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;
}
}
}
}
}