FicbookExtractor

The script allows you to download books to an FB2 file without any limits

< Feedback on FicbookExtractor

Review: Good - script works

§
Posted: 2025-12-14

Небольшая бага.
Если на страницу скачивания перейти через открытие в новой вкладке, то кнопка скачивания от скрипта не появляется - требуется обновить страницу.

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

Ox90Author
§
Posted: 2025-12-15

Если на страницу скачивания перейти через открытие в новой вкладке, то кнопка скачивания от скрипта не появляется - требуется обновить

Не смог воспроизвести. Для скрипта нет разницы как именно была загружена страница - скрипт в любом случае запускается. Возможно что-то не то с плагином? Буду благодарен за дополнительную информацию.

сделать дубликат кнопки скачивания скрипта сразу на странице с аннотацией

Причина, полагаю, в том, чтобы не делать лишний клик, раз выбора фактически и нет, так? А куда именно вы предлагаете добавить кнопку, в какой блок? Боюсь добавить куда-нибудь не туда, где может различаться раскладка при других условиях.

§
Posted: 2025-12-15
Не смог воспроизвести. Для скрипта нет разницы как именно была загружена страница - скрипт в любом случае запускается. Возможно что-то не то с плагином? Буду благодарен за дополнительную информацию.

Нашёл.
Не возвращается в watchPage() константа csection, т.к. скрипт при открытии другой вкладки вызывается раньше загрузки DOM.
В настройках скрипта поставил запускать в document-start.

Причина, полагаю, в том, чтобы не делать лишний клик, раз выбора фактически и нет, так?

Ага.
Я в своём скрипте вставляю кнопку под блок section.chapter-info > header > section.

Ox90Author
§
Posted: 2025-12-15

Большое спасибо за информацию. Но вообще это странно - watchPage() запускается из init(), который запускается только после загрузки дерева (код в конце скрипта):

if (document.readyState === "loading") window.addEventListener("DOMContentLoaded", init);
  else init();

т.к. скрипт при открытии другой вкладки вызывается раньше загрузки DOM

Не могли бы вы пояснить в чем разница загрузки в этих случаях? Я не сильно разбираюсь в механизмах подстановки скриптов в DOM дерево, возможно что-то упустил. Я исходил из соображения, что addEventListener на DOMContentLoaded должен срабатывать лишь когда дерево полностью загрузилось.

Не могли бы вы указать какой плагин, браузер и ОС вы используете? Хочу потестировать. Было бы еще полезно узнать что находится в document.readyState в момент загрузки скрипта, если не сложно.

§
Posted: 2025-12-15

Браузер Brave (Chromium: 143.0.7499.40), win 11
Tampermonkey 5.4.1.

Когда скрипт добавляет кнопку, в document.readyState в момент вызова init() лежит interactive.
Когда init() вызван, но кнопка не появилась - complete.
Если я в настройках скрипта ставлю параметр "Запускать в:" по-умолчанию и перехожу по кнопке скачать в той же вкладке - interactive.

В общем, надо добавить в шапку скрипта режим его запуска (// @run-at document-start), чтобы не словить ещё у кого эту траблу - https://www.tampermonkey.net/documentation.php?locale=ru#meta:run_at

Ox90Author
§
Posted: 2025-12-15

Спасибо за информацию. Поправлю.

Ox90Author
§
Posted: 2025-12-15

У Tampermonkey и Greasemonkey разное дефолтное значение для @run-an, оказывается. Хех.

Почитал доки: хоть interactive, хоть complete гарантирует готовое DOM дерево. Возможно это "особенность" браузера Brave. Надо будет отряхнуть пыль с виртуалки с виндой и проверить.

§
Posted: 2025-12-15

Возможно получилось так, что повесив ивент после перехода в комплит, не возникло события для его вызова, т.к. вкладка открывается неактивной.

Ox90Author
§
Posted: 2025-12-15

В том то и дело, ивент на ожидание подгрузки дерева вешается только если document.readyState === "loading", в ином случае init() запускается немедленно. Да и судя по вашим данным init запускается в правильных readyState. Если вы про событие изменения контейнера - то до него дело не доходит ибо csection не инициируется (там проверка по if). Что касается проблем из-за открытия неактивной вкладки - то если такое и происходит, то это все та же "особенность" браузера, ибо по стандарту разницы быть не должно. Как минимум событие обязано сработать в момент активации вкладки в случае соблюдения основных условий.

§
Posted: 2025-12-15

Я именно про браузер )

Ox90Author
§
Posted: 2025-12-15

Ок, понял.

Ox90Author
§
Posted: 2025-12-15

Реализовано в версии 0.8.0

§
Posted: 2025-12-16
Edited: 2025-12-16

Спасибо.

Но сразу предупреждаю, что нельзя хардкодить ссылки на файл спрайтов (href="/assets/icons/icons-sprite7.svg#ic_fb2") - они его при каждом изменении фронтенда генерят и номер увеличивают. Надо либо вычитывать номер файла при каждом запуске скрипта, либо внедрить иконку в скрипт.

Ox90Author
§
Posted: 2025-12-16

Спасибо за предупреждение. В старом коде я тоже пришел к такому выводу и спустя несколько обновлений включил svg-код в тело скрипта. В новой версии что-то пошло не так и я сделал как проще и быстрее. Исправлю в ближайшей версии.

Благодарю за внимание к проекту.

Post reply

Sign in to post a reply.