Как найти JS скрипт, который добавляет атрибут HTML элементу

Когда работаешь с чужим кодом, который добавляет в HTML элементы какие-то атрибуты, которые ломает верстку, и это делает неизвестный js скрипт, найти ответственный участок кода иногда о-очень сложная задача. А порой такая задача может быть почти невыполнимой, без умения пользоваться дебагом.

В этой заметке разберем один из вариантов дебага в DevTools Google Chrome, который позволят найти скрипт (конкретый код), который изменяет атрибуты HTML элемента.

DevTool позволяет ставить DOM Breakpoints - брейкпоинты на элементы DOM девера. За более детальными примерами предлагаю сходить в эту статью: https://blog.bitsrc.io/using-dom-breakpoints-with-chrome-devtools-2f60e1fafcb2

Тут же, мы рассмотрим конкретный случай и его решение.

Проблема

На одном из сайтов, какой-то скрипт добавляет style="display: block" всем section элементам на странице. Такое поведение ломает верстку, потому что некоторые из этих элементов должны иметь свойство display: flex.

На сайте просто куча разных скриптов (интеграций), которые потенциально могут это делать. Логически догадаться, какой скрипт смотреть - невозможно.

Как найти скрипт и конкретно тот участок кода, который это делает?

Решение

В DevTool браузера Chrome можно устанавливать брейкпоинты на изменения ХТМЛ элементов, нас интересует "Модификация атрибута":

Right click on element > Break on > Attribute modifications

Сложноность тут заключается в том, что этот брейкпоинт работает только в рантайме, а у нас страница уже загрузилась и все скрипты отработали. Если тепрь поставить этот брейкпоинт и перезагрузить страницу, то ничего не произойдет.

Нам нужно где-то до модификации элемента остановить выполнение скриптов, затем включить брейкпоинт и только потом продолжить выполнение js сценария.

Сделать это можно по-разному, например так: устанавливаем брейкпоинт на любой скрипт, который выполняется до нужного нам события:

Ставим брейкпоинт для JS скрипта:

Перезагружаем страницу. Браузер останавливает js сценаций на месте нашего брейкпоинта.

Возвращаемся во вкладку Элементы и включаем DOM Breakpoint:

Запускаем остановленный сценарий дальше:

Теперь, следующей точкой остановки будет добавленный нами брейкпоинт ДОМ элемента:

Место кода, которе нас интересует найдено!

1 комментарий