Boosty Title Modifier

Добавляет время поста в заголовок *вкладки*

作者
Идзуми Сэна
日安装量
0
总安装量
13
评分
0 0 0
版本
0.45
创建于
2023-12-24
更新于
2025-11-04
大小
15.2 KB
许可证
暂无
适用于

Скрипт предназначен для работы на сайте boosty.to. Его основная задача — модификация заголовка вкладки браузера (<title>) при просмотре страницы конкретного поста. Скрипт извлекает дату и время публикации поста, форматирует их в стандартизированный вид (ГГГГ.ММ.ДД ЧЧ ММ) и добавляет эту информацию в начало заголовка. Это обеспечивает более информативное название вкладки, что особенно полезно при одновременной работе с несколькими постами.

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

Скрипт построен на архитектуре двух наблюдателей (MutationObserver), которую можно описать как "Искатель" и "Защитник".

  1. Парсинг и форматирование даты (parseBoostyDate):

    • Вспомогательная функция, которая принимает строковое представление даты, используемое на Boosty (например, "15 окт 2024, в 14:30").
    • Она преобразует эту строку в единый числовой формат ГГГГ.ММ.ДД ЧЧ ММ (например, 2024.10.15 14 30), используя внутренний словарь для конвертации названий месяцев.
  2. Наблюдатель за контентом ("Искатель" - startBodyObserver):

    • Это основной MutationObserver, который следит за изменениями во всем document.body. Он необходим для работы в среде одностраничного приложения (SPA), коим является Boosty.
    • Обнаружение страницы поста: При любом изменении DOM, "Искатель" проверяет наличие первого поста в основной колонке и наличие у него заголовка <h1> (включая заголовок в блоке платной подписки).
    • Установка заголовка: Если <h1> найден и data-post-id изменился (т.е. пользователь перешел на новый пост), скрипт:
      1. Извлекает дату (getPostTime) и заголовок (h1Title.textContent).
      2. Форматирует дату с помощью parseBoostyDate.
      3. Формирует новую строку currentFormattedTitle (например, "2024.10.15 14 30 - Название Поста").
      4. Устанавливает document.title в это новое значение.
      5. Активирует "Защитника" (startTitleObserver) для охраны этого нового заголовка.
    • Сброс состояния: Если <h1> не найден (т.е. пользователь ушел со страницы поста в ленту или настройки), "Искатель" отключает "Защитника" и сбрасывает внутреннее состояние (currentPostId = null), возвращая управление заголовком вкладки сайту.
  3. Наблюдатель за заголовком ("Защитник" - startTitleObserver):

    • Это второй, вспомогательный MutationObserver, который следит исключительно за тегом <title>.
    • Проблема: В SPA-приложениях, фреймворк сайта (в данном случае Boosty) часто пытается "исправить" заголовок вкладки при малейших внутренних событиях, сбрасывая его к значению по умолчанию (например, "Название Поста - Имя Автора").
    • Решение: Как только "Защитник" обнаруживает, что document.title был изменен не на то значение, которое установил скрипт (currentFormattedTitle), он немедленно и принудительно возвращает document.title к сохраненному значению. Это гарантирует, что отформатированный заголовок остается во вкладке до тех пор, пока пользователь не покинет страницу поста.

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

  1. Перейдите на сайт boosty.to и откройте страницу любого автора.
  2. При просмотре ленты автора заголовок вкладки будет стандартным (например, "Блог Автора").
  3. Откройте любой пост (перейдите на его индивидуальную страницу).
  4. Скрипт немедленно сработает, найдет дату поста, и заголовок вкладки изменится.

Особенности

  • Архитектура "Искатель-Защитник": Использование двух MutationObserver является ключевой особенностью. "Искатель" (bodyObserver) реагирует на навигацию в SPA, а "Защитник" (titleObserver) борется с попытками SPA сбросить установленное скриптом значение.
  • Управление состоянием: Скрипт использует глобальные переменные (currentPostId, currentFormattedTitle) как простую машину состояний, чтобы понимать, находится ли он в данный момент на странице поста и нужно ли ему "защищать" заголовок.
  • Адаптивность к SPA: Скрипт корректно обрабатывает навигацию внутри сайта (переход из ленты на пост и обратно) без необходимости полной перезагрузки страницы.
  • @grant none: Скрипт работает в режиме @grant none, что означает его выполнение в контексте самой страницы. Это позволяет ему эффективно отслеживать изменения DOM и document.title без задержек.

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

Скрипт не генерирует видимый контент на странице. Его единственный результат — изменение текста во вкладке браузера.

Если оригинальный заголовок вкладки Boosty:

Настоящая история | Авторский блог