document.createElement, возвращающий 'undefined' - PullRequest
0 голосов
/ 15 января 2019

Я работаю над приложением Vaadin 8. В паре трудно охарактеризованных сценариев - и я не смог выделить фактор запуска - document.createElement начинает возвращать undefined для всех вызовов. Это было видно как в IE11, так и в Chrome (но при разных обстоятельствах в каждом случае). Моя первая теория заключалась в том, что это может быть проблема нехватки памяти в браузере, но я создал сценарий с большим количеством элементов DOM, который не воспроизводил ошибку, и профилирование памяти не показало заметного всплеска использования памяти в момент возникновения проблемы. , Кроме того, когда это происходит, это происходит в предсказуемый момент времени - недостаточно случайный, чтобы быть такой экологической проблемой.

Когда возникает проблема, консоль сообщает о странном состоянии функции document.createElement - она ​​выглядит «сломанной», но не похоже, что она просто забита другой функцией или чем-то еще. Вот что показывает консоль в обычных условиях:

Normal createElement in IE11

... в то время как это показано после возникновения проблемы (плюс ссылка на несуществующий атрибут в документе, чтобы проиллюстрировать разницу между этим и тем, что показывает createElement):

Broken createElement in IE11

В Chrome поведение в консоли аналогично:

Broken createElement in Chrome

Кто-нибудь видел такой симптом в каком-либо браузере и / или имел какое-то понимание в поиске причины?

РЕДАКТИРОВАТЬ 17 января 2018 г .: Когда я изначально писал это, я был свидетелем проблемного поведения только в IE11. С тех пор я видел такое же поведение при других обстоятельствах в Chrome.

1 Ответ

0 голосов
/ 23 января 2019

Моя проблема заключалась в том, что document.createElement был заменен каким-то (глючным) введенным антифишинговым JS, о котором я не знал.Проблема в том, что JS выходит за рамки этого вопроса, но советы по отладке, приведенные в комментариях к вопросу, были полезны для отслеживания:

  1. Тот факт, что document.createElement был затенен, был обнаруженотметив, что document.hasOwnProperty('createElement') вернул true.
  2. Определение функции установки для document.createElement, которая запускает отладчик, помогло мне отследить нарушающий код.Для этой цели я использовал фрагмент кода break-on-access , но также вижу простой код в этом комментарии выше для альтернативной альтернативы.
...