Удаление параметров mw и mh из ссылок на изображения на Boosty, если не указано "&croped", позволяет загружать изображения-превью в оригинальном разрешении
Скрипт предназначен для работы на сайте boosty.to. Его основная задача — удаление параметров mw (max-width) и mh (max-height) из URL-адресов изображений, загружаемых с серверов Boosty.
Это принуждает браузер загружать оригинальные, полноразмерные версии изображений вместо сжатых или масштабированных "превью", которые Boosty генерирует с помощью этих параметров. Скрипт имеет важное исключение: он не модифицирует URL, если в них присутствует параметр croped, так как это, как правило, кадрированные изображения (например, аватары), которые должны оставаться в заданном размере.
cleanURL(url):
query string).URLSearchParams она проверяет наличие параметров. Если параметр croped (в любом виде, например, &croped или croped=) отсутствует в строке, функция удаляет параметры mw и mh.Map (urlCleanCache) для кэширования результатов. Если один и тот же URL (например, аватар в 10 комментариях) запрашивается повторно, функция мгновенно возвращает очищенный URL из кэша, избегая повторной обработки.processImage(node):
<img>, его src ведет на boosty.to/image, и он еще не был обработан (нет атрибута data-cleaned="true").data-cleaned="true", чтобы предотвратить повторную обработку этого же элемента.src: Вызывает cleanURL для основного атрибута src изображения.srcset: Корректно обрабатывает адаптивные изображения. Атрибут srcset (содержащий несколько URL с дескрипторами размера, "url1 100w, url2 200w") разбирается, каждый URL в нем очищается через cleanURL, а затем srcset собирается обратно с сохранением дескрипторов.MutationObserver (Наблюдатель DOM):
MutationObserver для отслеживания всего document.body на предмет добавления новых дочерних узлов (childList: true, subtree: true).boosty.to, который является одностраничным приложением (SPA). Когда пользователь прокручивает ленту ("бесконечная прокрутка") или открывает комментарии, новые посты и изображения добавляются в DOM динамически.MutationObserver перехватывает эти добавления, находит в них новые изображения (node.querySelectorAll) и отправляет их в processImage на обработку.Первоначальный запуск:
MutationObserver (который отслеживает будущие изменения), скрипт при запуске выполняет document.querySelectorAll(...).forEach(processImage).Скрипт полностью автоматизирован.
boosty.to.mw и mh.Map (urlCleanCache) для кэширования URL-адресов и data-attribute (data-cleaned) для маркировки обработанных DOM-узлов резко снижает нагрузку, особенно на страницах с большим количеством повторяющихся изображений (например, в комментариях).srcset: Скрипт не просто меняет src, но и грамотно парсит srcset, что критически важно для корректной работы на современных адаптивных сайтах.MutationObserver гарантирует, что скрипт будет работать не только при первоначальной загрузке, но и при любой динамической подгрузке контента на сайте.@grant none: Скрипт работает в контексте страницы, что обеспечивает ему прямой и быстрый доступ к DOM и URLSearchParams без необходимости использования GM_* API.