TGViewer
Cododel.dev | Александр Cododel.dev | Александр @cododel_dev · 229 subscribers
Post #357 96
💬 Отслеживание сетевой активности и переходов между страницами в SPA

При создании инъецируемых скриптов для сайтов, использующих архитектуру SPA (Single Page Application), может возникнуть потребность отслеживать переходы между страницами или перезагрузки элементов. Из-за динамической подгрузки контента через AJAX и Fetch, события DOMContentLoaded или load будут бесполезны.

Для инъецируемых скриптов, хорошим решением будет отслеживать состояние радиомолчания (network idle). Оно наступает, когда все сетевые запросы завершены, и сеть на некоторое время «замолкает». Подобное поведение полезно, если нужно запустить код только после того, как пройдут все запросы или после перехода на другую страницу, чтобы реинициализировать скрипт.

💻 Пример сценария использования

Представьте себе, что вы хотите внедрить кнопки, виджет или другую логику на странице, которая должна запускаться после перехода на новую страницу в SPA-приложении. В этом случае подойдет отслеживание network-idle, чтобы понять, когда контент страницы загрузился.

🤫 Как это работает

1. Инициализация счетчика активных сетевых запросов.

Сниппет отслеживает все сетевые запросы на странице (Fetch и XMLHttpRequest) с помощью PerformanceObserver. Каждый раз, когда начинается новый сетевой запрос, счетчик activeRequests увеличивается.

2. Обработка завершения запросов.

После завершения запроса activeRequests уменьшается, и проверяется состояние сети. Если активных запросов не осталось, через 500 мс на объекте window генерируется событие network-idle.

3. Использование события network-idle.

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

4. Задержка перед генерацией события.

Задержка в 500 мс добавлена, чтобы устранить "шум" случайных срабатываний и убедиться, что действительно наступило состояние радиомолчания.

📞 Важно:

• Модификации роутов в SPA. Если у вашего SPA-приложения не используются сетевые запросы при изменении маршрутов, дополнительно можно привязаться к событиям history.pushState и popstate.

• Очистка обсерверов. Не забывайте отключать обсерверы, чтобы избежать утечек памяти, если ваш скрипт прекращает свое действие при определенных условиях.

🫡 Заключение

Этот сниппет помогает организовать логику на основе сетевых событий в инъецируемых скриптах для приложений с динамическим роутингом, позволяя учитывать состояние “радиомолчания” и гарантируя, инъецируемые скрипты выполняются после прогрузки страницы, а также помогает перезапускать инъецируемый скрипт при переходах между страницами.

🖼️ Ознакомиться со сниппетом можно на GitHub Gist.

#JavaScript
  • ❤ 1
More from @cododel_dev
  1. Sep 30, 2026OpenAI: Мы порезали лимиты в 2 раза, и релизнули Dot ботов на Astra High Me: найди мем
  2. Sep 30, 2026Выехал из дома на велике Дорогу назад помню слабо. Единственный минус телефона по итогу -…
  3. Sep 21, 2026Ого какие вакансии бывают Больше удивлен что предложения на почти пустой линкдин приходят…
  4. Sep 15, 2026Все что нужно знать сегодня о “Работать будет только на английском” 😐
  5. Sep 15, 2026Post #1153
  6. Sep 14, 2026200 🤝 Всех новоприбывших обнял-приподнял Умного пока ничего не придумал, чем хотел бы сро…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →