#javascript #youtube
#javascript #YouTube
Вопрос:
Хорошо, я программист SQL по профессии, но я пытаюсь разобраться в (предположительно) простом greasemonkey javascript, собранном из других примеров, многие из которых найдены здесь.
По сути, я хочу проверить текущего пользователя видео по массиву «хороших» пользователей. Если они найдены в списке, проблем нет; если их нет, перенаправьте страницу обратно на youtube.com . У меня есть скрипт, работающий над первым воспроизведением видео, но когда по ссылке выбирается другое видео, объект document, похоже, не загружается, или getElementByClassName ничего не находит и возвращает «undefined».
Вот полный сценарий GreaseMonkey на данный момент:
// ==UserScript==
// @name YouTube Limit To Users
// @namespace http://userscripts.org/users/23652
// @include https://www.youtube.com/watch
// @version 1
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
var goodYoutubers=["Sqaishey Quack", "Graser10", "Good Mythical Morning"];
window.onload = DoCheckForUser();
function youtubePageChange()
{
DoCheckForUser();
$('body').on('transitionend', function(event)
{
if (event.target.id != 'progress') return false;
DoCheckForUser();
});
}
$(youtubePageChange);
function DoCheckForUser () {
var y = document.getElementsByClassName('yt-user-info');
var aNode = y[0]; //<<< this goes "undefined"
var currentUser = aNode.textContent.trim();
alert(currentUser);
var indexUser = goodYoutubers.indexOf(currentUser);
if (indexUser < 0)
{
alert(currentUser " is NOT an approved YouTuber!");
window.location = "http://www.youtube.com";
}
else
{
alert(currentUser " is an approved YouTuber!");
}
}
Ответ №1:
в фоновом сценарии:
window.addEventListener("spfdone", process); // old youtube design
window.addEventListener("yt-navigate-start", process); // new youtube design
document.addEventListener("DOMContentLoaded", process); // one-time early processing
window.addEventListener("load", process); // one-time late postprocessing