我的网络应用程序在Google Chrome中无法确定地崩溃

时间:2010-10-11 10:31:55

标签: javascript google-chrome prototype webkit crash

在我的网络应用中,我使用 Ctrl + 箭头键在表格中从一个单元格导航到另一个单元格。

所有单元格都包含可见的<span>和隐藏的<input>元素 - 它们的值保持同步。

激活单元格后,隐藏<span>,同时显示输入。

Firefox,IE,Opera等一切正常。但是,当我加载Chrome时,使用 Ctrl + Left Ctrl + 崩溃了页面(我看到了“Aw Snap”页面)。奇怪的是, Ctrl + Up Ctrl + Down work。

我已经确定以下代码(直接或间接地导致崩溃):

/**
 * Deactivates a cell, hiding its input field, and showing its span field
 */
View.prototype.deactivateCell = function (cell){
 //Show the span, hide the input
 var label = cell.descendants()[0];
 var input = cell.descendants()[1];
 if(label){
  label.show();
 }
 if(input){
  //THIS NEXT LINE IN PARTICULAR CAUSES THE CRASH
  //I've also tried input.style.display = "none"; - same result
  input.hide();
 }
}

奇怪的是,此代码由 Ctrl + Up / Down 以及 Ctrl 调用+ / - 但它只在 / 时崩溃 - 即使是相同的{{1} }值!

所有这些细胞都有两个,只有两个后代......而且崩溃与源细胞或目标细胞无关 - 它可以从上面移动到任何细胞,但不能从左

什么更奇怪;在cell方法的末尾添加alert(1);可以防止崩溃。将它放在方法的开头没有任何效果(其他然后在崩溃前显示警报对话框)

我尝试在测试文件中隔离相关的HTML +此方法 - 我无法重现崩溃。

有没有人遇到过这个?我应该把它写成浏览器错误吗?有谁知道我可能会如何调试它,或尝试修复它?我没有最模糊的印象,当很多其他网站都没问题时,我的Javascript会如何导致浏览器被限制。

2 个答案:

答案 0 :(得分:1)

我不是原型英雄,但我注意到你在不检查单元格是否为空的情况下调用cell.descendants()

另外,你是否隐藏了光标所在的当前输入?如果是这样,请在隐藏当前输入之前尝试focus()到不同的输入。

答案 1 :(得分:0)

事实证明这是bug with Webkit,已经提交并修复了。