2016-10-01 163 views
0

好吧,我是一名貿易SQL程序員,但我試圖找出一個(據說)簡單的greasemonkey javascript,從其他很多在這裏找到的例子拼湊在一起。Javascript on YouTube Video Change

基本上,我想檢查當前的視頻用戶對陣「好」用戶。如果他們在列表中找到,沒問題;如果它們不是,則將該頁面重定向回youtube.com。我有腳本處理第一個視頻播放,但是當通過鏈接選擇另一個視頻時,文檔對象似乎並未加載,或者getElementByClassName未找到任何內容並返回「未定義」。

這是迄今充分的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!"); 
    } 
} 

回答

0

在後臺腳本:

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