Изменение Javascript на видео YouTube

#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