Greasy Fork is available in English.

Kinopoisk+

Add links to search torrent sites under movie poster

< Обсуждения Kinopoisk+

Вопрос/комментарий

§
Создано: 11.11.2018
Отредактировано: 14.11.2018

[bug] Использование $(document).ready не даёт гарантированного результата

Привет, я занимаюсь разработкой скрипта RU AdList JS Fixes (https://greasyfork.org/en/scripts/19993-ru-adlist-js-fixes) и мне сообщили, что в Firefox 52 ESR при использовании одновременно моего и твоего скриптов кнопки поиска не всегда появляются (особенно если удалить cookie). На сколько я понял, загрузка моего скрипта немного откладывает загрузку твоего из-за чего твой скрипт отрабатывает тогда, когда документ уже прогрузился. В результате вызов $(document).ready не делает ничего и, соответственно, весь твой код не отрабатывает.

Происходит это из-за того, что Tampermonkey/Greasemonkey по-умолчанию запускают скрипты нето на DOMContentLoaded, нето на событии непосредственно до него. Если $(document).ready не успевает отработать до DOMContentLoaded, то после от него уже толку нет и callback уже не запускается.

Рекомендую удалить $(document).ready. В моих тестах этого вполне достаточно для стабильной работы скрипта. Если нужна загрузка именно на DOMContentLoaded, то добавь в метаданные: // @run-at document-start а вместо $(document).ready воспользуйся document.addEventListener('DOMContentLoaded', callback_function, false); Тогда скрипт стартует задолго до окончания загрузки страницы, но основной код выполнится только когда страница будет уже доступна.

И ещё, добавь в метаданные (либо замени существующие строки): // @include https://kinopoisk.ru/film/* // @include https://www.kinopoisk.ru/film/* Так-как сейчас твой скрипт смотрит только на http, а сайт перенаправляет на https и твой код не отрабатывает.

В общем, я сделал свою версию скрипта: https://greasyfork.org/en/scripts/374380-kinopoisk

Ответить

Войдите, чтобы ответить.