[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 и твой код не отрабатывает.
[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 и твой код не отрабатывает.