F95Zone Enhanced Page Loader

Раскрывает спойлеры, загружает изображения, нажимает "загрузить еще", проходит страницы-маски и ОЧИЩАЕТ ЗАГОЛОВОК, добавляя в него инфо-список

当前为 2025-11-04 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
Идзуми Сэна
评分
0 0 0
版本
0.1
创建于
2025-11-04
更新于
2025-11-04
大小
14.5 KB
许可证
暂无
适用于

Анализ UserScript: F95Zone Enhanced Page Loader

Назначение

Скрипт представляет собой комплексный инструмент (enhancer) для сайта f95zone.to. Его основная цель — автоматизация рутинных действий пользователя для значительного ускорения просмотра и взаимодействия с контентом.

Скрипт выполняет две основные функции в зависимости от типа страницы:

  1. На страницах-масках (interstitial): Автоматически обнаруживает и нажимает ссылку "Продолжить", пропуская страницу-посредник.
  2. На страницах тем (/threads/): Активирует полный набор улучшений:
    • Автоматически раскрывает все спойлеры на странице.
    • Принудительно загружает все "ленивые" (lazy-load) изображения.
    • Автоматически нажимает кнопки "загрузить еще" (например, для подгрузки старых комментариев).
    • Очищает заголовок вкладки браузера от суффикса | F95zone и добавляет в него информативный список тегов, взятых со страницы.

Ключевые функции

  1. runInitialScan() (Точка входа и маршрутизация):

    • Это главная функция, запускаемая после загрузки страницы (window.load).
    • Она выполняет "маршрутизацию": сначала вызывает clickContinueLink().
    • Если clickContinueLink() возвращает true (страница-маска пройдена), выполнение завершается.
    • Если false (это не маска) и URL содержит /threads/, запускается processPageElements() и активируются два наблюдателя (MutationObserver).
  2. processPageElements() (Функция-оркестратор):

    • Вызывается на страницах тем. Она поочередно запускает все модули улучшения:
    • expandSpoilers(): Находит все элементы .bbCodeSpoiler-button, которые еще не были обработаны (нет data-processed), нажимает на них и помечает их, чтобы избежать повторных кликов.
    • loadLazyImages(): Находит все img.lazyload (без data-processed), считывает URL из data-src и немедленно присваивает его в src, принудительно загружая изображение.
    • clickLoadMoreButton(): Находит a.js-loadMore (без data-processed) и нажимает на нее для подгрузки динамического контента.
    • cleanPageTitle(): Вызывает функцию очистки и форматирования заголовка.
  3. cleanPageTitle() и getListItemsAsText() (Модификация заголовка):

    • Это двухэтапный процесс. Сначала getListItemsAsText() находит все теги темы (a.tagItem внутри .listInline--bullet) и собирает их в единую строку через запятую.
    • Затем cleanPageTitle() при первом запуске определяет "чистый" базовый заголовок, находя и отсекая суффиксы (например, | F95zone).
    • После этого она формирует новый заголовок, объединяя "чистый" базовый заголовок и строку тегов.
    • Результат сохраняется в lastSetTitle.
  4. contentObserver (Наблюдатель за контентом):

    • Экземпляр MutationObserver, который следит за document.body на предмет добавления новых узлов (childList: true, subtree: true).
    • Когда clickLoadMoreButton() (или другой скрипт) добавляет на страницу новый контент (например, пачку комментариев), этот наблюдатель срабатывает.
    • Он использует 500-миллисекундную задержку (debounce) и повторно запускает processPageElements(), чтобы раскрыть спойлеры и загрузить изображения в новом контенте.
  5. titleObserver (Наблюдатель за заголовком):

    • Второй, отдельный MutationObserver, который следит только за тегом <title>.
    • Назначение: Борьба со скриптами сайта. SPA-фреймворки часто "восстанавливают" заголовок вкладки при навигации.
    • Логика: Если наблюдатель замечает, что document.title изменился и не равен тому, что установил наш скрипт (lastSetTitle), он принудительно вызывает cleanPageTitle() заново, восстанавливая кастомный заголовок.

Как использовать

  1. Установите UserScript в Violentmonkey или аналогичный менеджер.
  2. Перейдите на сайт f95zone.to.
  3. При переходе по внешним ссылкам скрипт будет автоматически нажимать "Продолжить" на страницах-масках.
  4. При открытии любой страницы темы (/threads/):
    • Все спойлеры на странице мгновенно раскроются.
    • Все изображения загрузятся сразу, без необходимости прокрутки.
    • Кнопки "загрузить еще" (если они есть) будут нажаты автоматически.
    • Заголовок вкладки в браузере изменится, отобразив теги темы (например, "VNs, Ren'Py, Male Protagonist").

Особенности

  • Двойная архитектура MutationObserver: Ключевая особенность скрипта. Один наблюдатель (contentObserver) отвечает за новый контент на странице, а второй (titleObserver) "защищает" заголовок вкладки от сброса скриптами сайта.
  • Идемпотентность: Использование data-processed="true" гарантирует, что скрипт не будет бесконечно нажимать на одни и те же спойлеры или кнопки при каждом срабатывании MutationObserver.
  • Контекст @grant none: Скрипт выполняется в контексте страницы, что дает ему прямой доступ к DOM и document.title для максимальной скорости работы.
  • @run-at document-end: Скрипт начинает работу до полной загрузки всех ресурсов (как window.load), но после построения DOM, что позволяет ему быстро обрабатывать статический контент и устанавливать наблюдателей.
  • Оптимизация заголовка: Логика очистки заголовка надежно отделяет "базовое" название темы от суффикса сайта и обогащает его полезной информацией (тегами).

Пример выходных данных

Скрипт модифицирует DOM "на лету" и не генерирует файлов. Основным видимым результатом (помимо раскрытия контента) является изменение заголовка вкладки.

Оригинальный заголовок вкладки:

``**Теги, найденные на странице:** VNs,Ren'Py,Male Protagonist`

Выходные данные (новый заголовок вкладки):```