Необработанный TypeError: Невозможно прочитать свойство ‘firstChild’ у null после обновления до WordPress 5.5

Вопрос или проблема

Я получаю следующую ошибку из comment-reply.min.js (который, похоже, является файлом WordPress):

Uncaught TypeError: Cannot read property 'firstChild' of null
    at comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2
    at Object.moveForm (comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2)
    at HTMLAnchorElement.a (comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2)

Это известная проблема после обновления до WordPress 5.5 или мне стоит начать её отладку?

Как лучше всего решить эту проблему?

Мы не изменяли шаблон комментариев, а только обновились до последней версии WordPress.

Соответствующая часть шаблона:

<?php comment_id_fields($_GET["post_id"]); ?>
<?php do_action('comment_form', $_GET["post_id"]); ?>
            
<div class="fl-comment-form-cancel">
   <?php cancel_comment_reply_link(); ?>
</div>

После быстрого исследования, похоже, файл ищет элемент с id wp-temp-form-div, который не существует.

И проблема, похоже, заключается здесь:

, r = E(h.commentReplyTitleId)
, o = void 0 !== r ? r.firstChild.textContent : "";

Если commentReplyTitleId не существует, r будет null, следовательно, отличается от undefined, поэтому он пытается получить firstChild.


Быстрый обходной путь, который я использую:

(function () {
    var oldGet = document.getElementById.bind(document)
    document.getElementById = function (id) { return oldGet(id) || undefined; }
})();

Но мне кажется, что это ошибка в 5.5.

Это было исправлено в 5.5.1, коммит 48877:

Исправлена проверка на существование элемента ответа в comment-reply.js.

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

Ответ или решение

Несмотря на то, что вы столкнулись с ошибкой Uncaught TypeError: Cannot read property 'firstChild' of null после обновления до WordPress 5.5, важно отметить, что это известная проблема, которая была исправлена в версии 5.5.1.

Суть проблемы

Ошибка происходит из-за того, что скрипт comment-reply.min.js пытается получить элемент с идентификатором wp-temp-form-div, который отсутствует на странице. Если элемент не найден, метод document.getElementById() возвращает null, что и приводит к ошибке при попытке получить firstChild этого null значения.

Ошибка в коде

Как вы отметили в своем вопросе, в строке:

r = E(h.commentReplyTitleId),
o = void 0 !== r ? r.firstChild.textContent : "";

если r равен null, то выполнение r.firstChild вызывает ошибку.

Рабочее решение

Поскольку вы указали, что вы не меняли шаблон комментариев, а только обновили WordPress, самое разумное решение — просто обновить до версии WordPress 5.5.1 или выше, где данная проблема была исправлена.

Временное решение

Если вы по каким-то причинам не можете обновить до версии 5.5.1, приведенный вами обходной путь является временным решением, но не идеальным, так как изменяет поведение метода document.getElementById(). Это может привести к непредвиденным последствиям на других страницах, где используется этот метод.

Проверка исправлений

Убедитесь, что все плагины и тема, которые вы используете, совместимы с WordPress 5.5.1. Если у вас все еще возникают проблемы после обновления, вы можете проверить консоль разработчика на наличие других ошибок или конфликтов с плагинами.

Рекомендуемые действия

  1. Обновите ваш WordPress до версии 5.5.1 или выше.
  2. Проверьте совместимость всех плагинов и тем.
  3. Если обновление не решает проблему, попробуйте временно отключить все плагины и протестировать, воспроизводится ли ошибка. Если нет, включайте плагины по одному, чтобы выявить конфликтующий.

Таким образом, если вы следуете этим шагам, проблема должна быть успешно решена. Оставайтесь внимательными к обновлениям, так как WordPress активно развивается, и ошибки исправляются на регулярной основе.

Оцените материал
Добавить комментарий

Капча загружается...