Мое веб-приложение не детерминировано падает в Google Chrome - PullRequest
0 голосов
/ 11 октября 2010

В своем веб-приложении я использую Ctrl + Клавиши со стрелками для перемещения от ячейки к ячейке в таблице.

Все ячейки содержат видимый <span> и скрытый элемент <input> - их значения синхронизируются.

Когда ячейка активирована, <span> скрыт, пока отображается вход.

Все отлично работает в Firefox, IE, Opera и т. Д. Тем не менее, когда я загружаю Chrome, используйте Ctrl + Влево или Ctrl + Right вылетает страница (я вижу страницу "Aw Snap"). Странно то, что Ctrl + Вверх и Ctrl + Вниз Работа.

Я определил, что следующий код (прямо или косвенно ответственен за сбои):

/**
 * 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 + Вверх / Вниз , а также Ctrl + Слева / Справа - но он падает только на Слева / Справа - даже при одинаковых значениях cell!

У всех этих ячеек есть два, и только два, потомка ... И авария не имеет ничего общего с ячейками-источниками или ячейками назначения - можно перейти в любую ячейку сверху, но не из влево.

Что еще страннее; добавление alert(1); в конце метода deactivateCell(cell) предотвращает сбой. Помещение в начало метода не имеет никакого эффекта (кроме отображения диалогового окна с предупреждением до сбоя)

Я попытался выделить соответствующий HTML + этот метод в тестовом файле - я не смог воспроизвести сбой.

Кто-нибудь сталкивался с этим? Должен ли я списать это как ошибку браузера? Кто-нибудь знает, как я мог бы отладить это или попытаться это исправить? У меня нет ни малейшего впечатления о том, как мой Javascript может привести к зависанию браузера, когда так много других веб-сайтов в порядке.

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Я не герой-прототип, но я заметил, что вы звоните cell.descendants() без проверки, является ли ячейка нулевой или нет.

Кроме того, вы скрываете текущий ввод, в котором находится курсор? Если это так, попробуйте focus() для другого входа, прежде чем скрыть текущий.

0 голосов
/ 24 октября 2010

Оказывается, это ошибка с Webkit , которая уже была подана и исправлена.

...