Я понял это после некоторых исследований. Во-первых, мне не нравятся решения, которые используют setTimeout
. Это часто один из способов, предложенных в пользу устаревшего DOMNodeInserted
(который я использую в некоторых моих сценариях, но стараюсь избегать как можно больше), но, если это возможно, я всегда предпочитаю решение, где сценарий фактически выполняется после конкретное событие. Я опубликовал решение, которое я изначально использовал в первом разделе ниже, а затем окончательное решение, которое я использовал во втором разделе. Для всего кода ниже требуется jQuery.
Достойное решение, но не самый лучший
Сначала я имел решение, в котором я добавил click
событие для всех A
элементов, которые будут запускать таймер, который бежал мой сценарий после 2-х секунд. Это не изящно, потому что, если страница загружается быстро, то есть секунда, где сценарий не запускается. И если страница загружается более двух секунд, сценарий не запускается вообще. Сценарий ниже:
$('a').click(function()
{
setTimeout(youtubeFunction, 2000);
});
Гораздо лучшее решение
Так что я начал искать решение, которое было связано с тем, что я хотел сделать. В конце концов, я нашел других людей с подобной проблемой (например, людей, желающих создать скрипт Chrome, который изменяет страницы YouTube). Это привело меня к this particular Stack Overflow solution, в котором в основном говорится, что красная панель загрузки в верхней части страниц YouTube была элементом перехода CSS и что при ее завершении она создала событие (с учетом регистра). Код в связанном решении не был полным (для меня в любом случае), но он объяснил, как достичь рабочего решения. Код, который я запускаю только один раз на страницу, является идеальным.Так вот что я сейчас:
function youtubePageChange()
{
youtubeFunction();
$('body').on('transitionend', function(event)
{
if (event.target.id != 'progress') return false;
youtubeFunction();
});
}
$(youtubePageChange);
Чтобы объяснить код, приведенный выше, в основном я запускаю код один раз при первой загрузке страницы YouTube (например, введя URL-адрес в адресной строке). Затем для каждого последующего щелчка, который требует индикатор выполнения, код запускается снова.
Красный прогресс штрих-код
О, и в будущем, когда красный индикатор появляется в верхней части страницы YouTube, сайт временно добавляет новый DIV
к концу BODY
, с помощью следующего кода:
<div id="progress" class="waiting" style="transition-duration: 400ms; width: 99%;"><dt></dt><dd></dd></div>
Прилагают eventlistener к содержимому div #. – Mike
@Mike: Это достойный ответ, если вы предоставите образец короткого кода –
Да, я ищу пример кода. Я знаю, что мне нужен прослушиватель событий, но я не могу найти нужную «комбинацию», чтобы он работал правильно на YouTube. Я делал это раньше на других сайтах, но YouTube немного отличается. – Gary