NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Bypass YouTube age verification Improved
// @id DelvinFox.Userscript.Bypass-YouTube-age-verification
// @namespace delvin@userscripts.org
// @description A script that bypasses YouTube age verification without logging in.
// @author DelvinFox, Volkan K.
// @license MIT
// @copyright 2011 DelvinFox, 2012-2017+ Volkan K.
// @homepageURL https://greasyfork.org/en/scripts/3848-bypass-youtube-age-verification-improved
// @supportURL https://greasyfork.org/en/scripts/3848-bypass-youtube-age-verification-improved/feedback
// @version 6.6
// @domain youtube.com
// @domain www.youtube.com
// @include http://youtube.com/*
// @include http://www.youtube.com/*
// @include https://youtube.com/*
// @include https://www.youtube.com/*
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_registerMenuCommand
// @grant GM_addStyle
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/js-url/2.0.2/url.min.js
// @require https://cdn.jsdelivr.net/phpjs/0.1/xml/utf8_decode.js
// @run-at document-end
// ==/UserScript==
/* #################### SETTINGS START #################### */
var yt_autostart = 1; // 1= enable autoplay, 0= disable autoplay. only for SWFobject inclusions. (embed)
var yt_showrelated = 1; // 1=enable related videos, 0=disable related videos. only for SWFobject inclusions. (embed)
var bypass_method = 3;
// 1 = Googlebot useragent method (use GM_xmlhttpRequest to get player and replace current page)
// 2 = USE IFRAME API (call http://youtube.com/embed/VIDEO_ID using frame)
// 3 = Get embed variables and load player using these variables
// 4 = SWFobject inclusion method (call http://youtube.com/v/VIDEO_ID SWF object from the current page)
var method3_embedded = true; // true=enable embedded player for method 3, false=use web player (bypass may fail).
var debug_internal = 1; // 1=enable debug , 0 =disable debug
var disable_material = 0; // 1=disable polymer , 0=dont disable.
var disable_spf = 1; // disable Red Bar aka SPF
var use_dialog = 0; // 1= use dialog, 0 = use youtube parent
// INTERNALS
window.please_no_more_action = false;
var base_tag_needed = false;
var url=null;
/*if ($("ytd-watch").length>0) {
use_dialog = 1; // new design removes added HTML elements. we need dialog.
if (bypass_method ==3){
bypass_method=2; // unfortunately method 3 doesn't work with polymer.
}
}*/
/* #################### SETTINGS END #################### */
this.$ = this.jQuery = jQuery.noConflict(true);
var bypass_method_original=bypass_method;
function debugLog(message) {
if (debug_internal==1) {
console.log("USER-SCRIPT YT-BYPASS | " + message);
}
}
function create_world(){
debugLog("create_world function called");
window.please_no_more_action = false;
base_tag_needed = false;
bypass_method = bypass_method_original;
if ( !(/watch/i.test(window.location)) ) { // this is not a video page?
debugLog("this is not a video page?");
bypass_method = 1;
}
if ( $( "a[data-sessionlink*='feature=private_video']" ).length > 0 ) { // this is private video? we can not access private videos.
debugLog("this is private video? we can not access private videos.");
bypass_method = 0;
}
var gm_page_changed = $('meta[name="GM_PAGE_CHANGED"]').attr("content");
if (gm_page_changed == "YES"){
debugLog("we already processed this page, it shouldn't be processed again."); // for debugging only.
}
if ( window.location.pathname.match("/verify_controversy") ) {
if ( ignorecont=document.getElementById('ignorecont') ) {
ignorecont.checked=true;
ignorecont.form.submit();
}
else if ( verify_actions=document.getElementById('verify-actions') ) {
buttons=verify_actions.getElementsByTagName('button');
for (var i=0;i<buttons.length;i++) {
if ( buttons[i].getAttribute("type")=="submit" ) {
buttons[i].click();
}
}
}
}
var match_next_url = window.location.search.match( /[^?&]*next_url=([^&]*)/ );
if (match_next_url!=null){
var base_tag_needed = true;
var url = decodeURIComponent( match_next_url[1] );
if ( is_it_already_processed()===false ){
var ref = document.referrer;
if (ref.match(/^https?:\/\/([^\/]+\.)?youtube\.com(\/|$)/i) || (window.url("?wait_a_minute")=="YES" || window.url("?wait_a_minute",url)=="YES") ) { // we don't want infinite loop. in case YT redirects us back to verify page.
debugLog("Came from YouTube. won't redirect!"); // for debugging
} else {
// notice: it re-executes the script when we replace the page. WTF?!?
if ( is_it_bypass_page() ) { // thats why we will triple-check. run the shit-detector..
if (window.url('query',url)){
window.location.assign(url+'&wait_a_minute=YES');
} else {
window.location.assign(url+'?wait_a_minute=YES');
}
window.please_no_more_action = true;
}
}
}
}
GM_registerMenuCommand("YT Cinema Mode", function(){
if( $("#page").hasClass("watch-non-stage-mode") ){
$("#page").removeClass("watch-non-stage-mode");
}
$("#page").addClass("watch-wide watch-stage-mode").css("background-color","#1b1b1b");
$("#content").removeClass("watch-small").addClass("watch-medium watch-multicamera");
$("#player").removeClass("watch-small").addClass("watch-medium watch-multicamera");
$("#player-api_neo, #player-api").css("margin-top","0");
});
}
function remove_all_players() {
$('video').each(function() {
$(this)[0].pause();
$(this)[0].currentTime = 0;
$(this).attr('src', '');
$(this)[0].load();
$(this)[0].innerHTML='';
$(this)[0].load();
$(this).removeAttr('src');
$(this)[0].load();
$(this).remove();
});
$("iframe").each(function() {
$(this).attr('src','https://www.youtube.com/html5');
$(this).remove();
});
}
function pause_all_players() {
/*if ( ($('iframe#ytplayer').length > 0) && !(jQuery('iframe#ytplayer').is(':visible'))){
$('iframe#ytplayer')[0].contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
}
if ( ($('#video-player').length > 0) && !(jQuery('#video-player').is(':visible'))){
$('#video-player')[0].pauseVideo();
}*/
$("iframe#ytplayer").each(function() {
$(this)[0].contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
});
$('div.html5-video-player').each(function() {
$(this)[0].pauseVideo();
});
}
function addStyle_external(css_link, once) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) {
return;
}
if (once && $("link[href='"+css_link+"']").length>0) {
return;
}
style = document.createElement('link');
style.setAttribute("rel", "stylesheet");
style.setAttribute("type", "text/css");
style.setAttribute("id", "gm_added_style1");
style.setAttribute("href", css_link);
head.appendChild(style);
}
function addGlobalStyle(css, once,id) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) {
return;
}
if (once && document.getElementById(id)) {
return;
}
style = document.createElement('style');
style.setAttribute("type", "text/css");
style.setAttribute("id", id);
style.innerHTML = css;
head.appendChild(style);
}
function prepare_dialog_and_return_node(return_element) {
addStyle_external('https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css', true);
var maxZ = Math.max.apply(null,
$.map($('body *'), function(e,n) {
if ($(e).css('position') != 'static')
return parseInt($(e).css('z-index')) || 1;
}
)
);
addGlobalStyle(".ui-dialog { z-index: "+(maxZ+1)+"; position: absolute} #bypass2018 {background-color: white; font-size: 14px;}", true,'gm_added_style_bypass');
bypass_div = $("<div title='Youtube Video' id='bypass2018'></div>").dialog({
width: "auto",
close: function( event, ui ) {pause_all_players();$(this).dialog('destroy').remove();}
}); // width & height: auto, set child height.
bypass_div.height(400).width("50%");
if (bypass_div.width() < 650) {
bypass_div.width(650);
}
bypass_div.parent().position({
my: "center center",
at: "center center",
of: window
});
if (return_element===true){
return document.getElementById("bypass2018");
} else {
return "bypass2018";
}
}
function prepare_element_and_return_node(return_element,target_selector,clean_selector){
if ($(target_selector).length < 1) {
debugLog("DEBUG: target node matching failed!");
return ;
}
//alert("smth"); // are we running?
$(target_selector).empty();
$(clean_selector).remove();
$(target_selector).eq(0).css({'padding': '0','left':'0'});
debugLog("DEBUG: target node id = "+$(target_selector).eq(0).attr("id"));
$(".player-api").removeClass("player-api");
$(".off-screen-target").removeClass("off-screen-target");
if ($(target_selector).eq(0).attr("id")==="error-screen") {
var mytarget_dom_node=$(target_selector).eq(0).css('padding', '0').append('<div id="player-api_neo"></div>')[0];
dont_play_with_class=true;
}else if ($(target_selector).eq(0).attr("id")==="player-api") {
var mytarget_dom_node=document.getElementById('player-api');
$("#player-api").attr("id", "player-api_neo");
} else if ($(target_selector).eq(0).attr("id")==="player-unavailable") {
var mytarget_dom_node=document.getElementById('player-unavailable');
$("#player-unavailable").attr("id", "player-api_neo");
} else if ($(target_selector).eq(0).attr("id")==="verify"){
var mytarget_dom_node=document.getElementById('verify');
//mytarget_dom_node.className += " " + 'player-height player-width';
$("#verify").attr("id", "player-api_neo");
$('#player-api_neo').css('width', '');
$("#player-api_neo").css("margin-top","1em");
$("#player-api_neo").css("margin-left","auto");
$("#player-api_neo").css("margin-right","auto");
} else if ($(target_selector).eq(0).attr("id")===undefined){
$(target_selector).eq(0).attr("id","player-api_neo");
var mytarget_dom_node=document.getElementById("player-api_neo");
} else { // id is not undefined, verify, player-unavailable, player-api, or error-screen, but something else!
var mytarget_dom_node=document.getElementById($(target_selector).eq(0).attr("id"));
}
$('#player-unavailable, #verify').empty().addClass("hid").hide(); // or remove.
$("#player-api_neo").removeClass("player-unavailable hid off-screen-target");
if (typeof dont_play_with_class == "undefined" || dont_play_with_class==false) {
$("#player-api_neo").addClass("player-height player-width player-api");
}
if (return_element===false) {
var mytarget_dom_node = mytarget_dom_node.getAttribute("id");
}
return mytarget_dom_node;
}
function worker_html_create( url , swf) {
debugLog("worker_html_create function called with url ="+url);
var VIDEO_ID=get_video_id_from_yturl(url);
if ( jQuery( "[data-videoid='"+VIDEO_ID+"']" ).length>0 ) {
return true;
}
jQuery( "iframe#ytplayer, embed#movie_player_neo" ).remove();
if (use_dialog == 1){
mytarget_dom_node = prepare_dialog_and_return_node(true);
} else {
mytarget_dom_node = prepare_element_and_return_node(true,"#player-api","#error-screen,#player-unavailable,#verify");
}
/*while (mytarget_dom_node.firstChild) { // clear error messages etc
mytarget_dom_node.removeChild(mytarget_dom_node.firstChild); // not necessary anymore...
}*/
var yt_src_suffix = '?enablejsapi=1&playerapiid=ytplayer';
if (yt_showrelated==0){
yt_src_suffix += '&rel=0';
} else {
yt_src_suffix += '&rel=1';
}
if (yt_autostart==0){
yt_src_suffix += '&autoplay=0';
} else {
yt_src_suffix += '&autoplay=1';
}
if (swf === true ){
// ADD SWF object
var newEmbed = document.createElement("embed"); // create our player
newEmbed.setAttribute('name','movie_player_neo');
newEmbed.setAttribute('id','movie_player_neo');
newEmbed.setAttribute('data-videoid',VIDEO_ID);
newEmbed.setAttribute('width','100%');
newEmbed.setAttribute('height','100%');
newEmbed.setAttribute('wmode','opaque');
newEmbed.setAttribute('bgcolor','#000000');
newEmbed.setAttribute('allowscriptaccess','always');
newEmbed.setAttribute('allowfullscreen','true');
var yt_src_url = '//www.youtube.com/v/'+VIDEO_ID + yt_src_suffix;
newEmbed.setAttribute('src',yt_src_url);
newEmbed.setAttribute('type','application/x-shockwave-flash');
mytarget_dom_node.appendChild(newEmbed);
} else {
// ADD HTML5 FRAME
var yt_src_url = '//www.youtube.com/embed/'+VIDEO_ID + yt_src_suffix + '&html5=1&fs=1';
$( mytarget_dom_node ).append('<iframe data-videoid="'+VIDEO_ID+'" id="ytplayer" type="text/html" frameborder="0" height="100%" width="100%" style="overflow:hidden;height:100%;width:100%" src="'+yt_src_url+'" webkitallowfullscreen mozallowfullscreen allowfullscreen />')
}
check_and_fill_rvs (VIDEO_ID);
}
function check_and_fill_rvs (VIDEO_ID) {
$("#related-skeleton, #player-ads").remove();
debugLog("check_and_fill_rvs function called with VIDEO_ID ="+VIDEO_ID);
if ($('#error-screen').length > 0) {
GM_addStyle("ul.video-list {list-style: none !important;}");
GM_addStyle(".video-list-item a{position: relative; padding: 0 5px; display: block; overflow: hidden; color: #333}.video-list-item .content-wrapper a{padding: 0}.video-list-item a:hover{background: #fff; text-decoration: none}.yt-tile-default.video-list-item a:hover{background: transparent}.video-list-item a:visited .title{color: #408}.video-list-item a:hover .title{text-decoration: underline}.video-list-item a:visited .video-thumb .img{opacity: .75; filter: alpha(opacity=75)}.video-list-item a:hover .video-thumb .img{opacity: 1; filter: none}.video-list-item .title{display: block; font-size: 1.1666em; font-weight: normal; line-height: 1.2; color: #03c; max-height: 3.6em; margin-bottom: 2px; overflow: hidden; cursor: pointer; cursor: hand}.video-list-item .episodic-item .title{overflow: hidden; white-space: nowrap; word-wrap: normal; -o-text-overflow: ellipsis; text-overflow: ellipsis}.video-list-item .stat{display: block; font-size: .9166em; color: #666; line-height: 1.4em; height: 1.4em; white-space: nowrap}.video-list-item .stat .time-created{margin-left: .25em; padding-left: .5em; border-left: 1px solid #ccc; white-space: nowrap}.video-list-item .mix-playlist .stat{white-space: normal}.video-list-item .stat strong{color: #333}.video-list-item .views{color: #333; font-weight: 500}.video-list-item .alt{float: right; margin-right: 5px}.video-list-item .playlist-video-count{margin-left: 10px}.video-list-item .playlist-video{height: 15px; overflow: hidden}.video-list-item .ux-thumb-wrap .video-count{position: absolute; top: 2px; right: 2px; padding: 2px; background: rgba(0,0,0,.8); color: #fff; font-weight: normal; font-size: 90%; line-height: 1; text-align: center}.video-list-item .ux-thumb-wrap .video-count strong{display: block}.video-grid .video-list-item{float: left; clear: none; width: 116px}.video-grid .video-list-item .video-thumb{float: none; margin: 0}.video-grid .video-list-item .title{width: 100%; max-height: 3.6em; overflow: hidden}.ad-badge-byline{margin-right: 3px}.video-list .video-list-item .title{color: #333; font-size: 14px; font-weight: 500}.video-list .video-list-item .title:hover{text-decoration: underline}.video-list .video-list-item .title:visited{color: #036}.video-list .video-list-item .description,.video-list .video-list-item .stat{color: #767676; font-size: 11px}.video-list .video-list-item .description{line-height: 1.2em; max-height: 2.4em; overflow: hidden}.video-list .video-list-item a.related-channel{padding-left: 61px}.video-list .yt-thumb-64 .yt-thumb-square{background-color: #333}.video-list .related-list-item-compact-movie-vertical-poster a.related-movie{text-align: center}.video-list .related-list-item-compact-movie-vertical-poster .content-wrapper,.video-list .related-list-item-compact-movie-vertical-poster .content-wrapper .content-link{height: 100%}.video-list .movie-data{font-size: 11px; line-height: 1.4em; color: #767676; text-overflow: ellipsis; overflow: hidden}.video-list .movie-data li{white-space: nowrap}.video-list .related-list-item-compact-movie-vertical-poster .movie-data{margin-top: 2px}.video-list .movie-description{margin-top: 4px}.video-list .related-list-item-compact-movie-vertical-poster .movie-description{margin-top: 7px}.video-list .movie-bottom-aligned-badge{position: absolute; bottom: 0; left: 0}.related-list-item .content-wrapper{margin-left: 181px}.related-list-item .content-link{display: block; min-height: 94px; text-decoration: none}.related-list-item .thumb-wrapper{position: absolute; top: 0; margin: 0 5px; width: 168px; height: 94px; overflow: hidden}.related-list-item.related-list-item-compact-movie,.related-list-item.related-list-item-compact-movie .thumb-wrapper{height: 94px}.related-list-item.related-list-item-compact-movie-vertical-poster,.related-list-item.related-list-item-compact-movie-vertical-poster .thumb-wrapper{height: 174px}.related-list-item .thumb-wrapper a{padding: 0}.related-list-item .video-actions{position: absolute; right: -60px; bottom: 2px}.related-list-item .video-time,.related-list-item .video-time-overlay,.related-list-item .video-actions:focus,.related-list-item:hover .video-actions{right: 2px}.related-list-item:hover .video-time,.related-list-item:hover .video-time-overlay{right: -60px}.related-list-item.show-video-time:hover .video-time,.related-list-item.show-video-time:hover .video-time-overlay{right: 2px}.video-list-item .yt-uix-simple-thumb-wrap{float: left; margin: 0 8px 0 0}a:hover .yt-uix-simple-thumb-wrap .video-time,a:hover .yt-uix-simple-thumb-wrap .video-time-overlay{display: none}.video-time,.video-time-overlay{position: absolute; right: 2px; bottom: 2px;}.video-time{margin-top: 0; margin-right: 0; padding: 0 4px; font-weight: 500; font-size: 11px; background-color: #000; color: #fff!important; height: 14px; line-height: 14px; opacity: .75; filter: alpha(opacity=75); display: -moz-inline-stack; vertical-align: top; display: inline-block;}.yt-uix-simple-thumb-wrap{position: relative; overflow: hidden; display: inline-block}#watch7-sidebar .video-list-item:hover .title,#watch7-sidebar .video-list-item:hover .title .yt-deemphasized-text{color: #167ac6; text-decoration: none}.video-list-item a:hover{text-decoration: none}a{text-decoration: none}");
}
if ($('div#watch7-sidebar-modules div.watch-sidebar-section').length < 1) {
$('div#watch7-sidebar-modules, #related').append('<div class="watch-sidebar-section"></div>');
}
if ($('div.watch-sidebar-section div.watch-sidebar-body').length < 1) {
$('div.watch-sidebar-section:first').append('<div class="watch-sidebar-body"></div>');
}
if ($('ul#watch-related').length < 1) {
$('div.watch-sidebar-body:first').append('<ul id="watch-related" class="video-list"></ul>');
}
var emptyRvs = $("ul#watch-related").filter(function() {
return $.trim($(this).text()) === "" && $(this).children().length === 0;
});
if (emptyRvs.length>0 && $("ul#watch-related li").length==0 && $("ytd-compact-video-renderer").length==0){
debugLog("we dont have related videos in page source!");
if (yt_showrelated!=0){
GM_xmlhttpRequest({
method: "GET",
headers: { 'Referer': 'https://www.youtube.com/'},
url: 'http://www.youtube.com/get_video_info?asv=3&hl=en_US&el=embedded&eurl=https%3A%2F%2Fwww.youtube.com%2F&video_id='+VIDEO_ID,
onload: function( response ) {
if ( response.status == 200 ) {
rvs_decoded = loadStringVar("rvs", response.responseText);
//rvs_decoded_2 = urldecode(rvs_decoded); // for debugging, do not leave this uncommented, double urldecode breaks some strings.
//alert(rvs_decoded_2); /*alert(rvs_decoded);*/ // for debugging
if (rvs_decoded!=""){ // I guess we got something, lets continue
$.each(rvs_decoded.split(","), function( index, value ) {
rv_id=loadStringVar("id", value);
rv_time=loadStringVar("length_seconds", value);
minutes = Math.floor(rv_time / 60);
seconds = rv_time - minutes * 60;
rv_time=minutes+":"+(seconds < 10 ? "0" + seconds : seconds);
rv_title=utf8_decode(urldecode(loadStringVar("title", value)));
rv_author=utf8_decode(urldecode(loadStringVar("author", value)));
if (rv_author==""){rv_author="<i>UnKnown</i>";rv_author_style='display:none;'} else {rv_author_style='';}
rv_hits=loadStringVar("view_count", value);
if (rv_hits==""){rv_hits="<i>UnKnown</i>";rv_hits_style='display:none;'} else {rv_hits_style='';}
// for related playlists
rv_vid=loadStringVar("video_id", value);
rv_list=loadStringVar("list", value);
rv_pl_title=utf8_decode(urldecode(loadStringVar("playlist_title", value)));
rv_pl_length=loadStringVar("playlist_length", value);
rv_pl_author=utf8_decode(urldecode(loadStringVar("playlist_author", value)));
if (rv_pl_author==""){rv_pl_author="<i>UnKnown</i>";rv_pl_author_style='display:none;'} else {rv_pl_author_style='';}
rv_html="";
if (rv_id!=""){
rv_html=""
+'<li class="video-list-item related-list-item"> <a class=" related-video yt-uix-sessionlink" href="/watch?v='+rv_id+'"><span class="yt-uix-simple-thumb-wrap yt-uix-simple-thumb-related"><img width="120" height="90" src="//i.ytimg.com/vi/'+rv_id+'/default.jpg" aria-hidden="true">'
+'<span class="video-time">'+rv_time+'</span></span>'
+'<span title="'+rv_title+'" class="title" dir="ltr">'+rv_title+'</span>'
+'<span class="stat attribution" style="'+rv_author_style+'"><span data-name="relmfu" class="g-hovercard">by <span class=" g-hovercard">'+rv_author+'</span></span></span>'
+'<span class="stat view-count" style="'+rv_hits_style+'">'+rv_hits+' views</span></a></li>';
} else if (rv_vid!="") {
rv_html=""
+'<li class="video-list-item related-list-item"><a class="related-playlist yt-pl-thumb-link mix-playlist resumable-list yt-uix-sessionlink" href="/watch?v='+rv_vid+'&list='+rv_list+'">'
+'<span class="yt-pl-thumb is-small"><span class="video-thumb yt-thumb yt-thumb-120"><span class="yt-thumb-default"><span class="yt-thumb-clip"><img width="120" src="//i.ytimg.com/vi/'+rv_vid+'/default.jpg" alt="" aria-hidden="true"><span class="vertical-align"></span></span></span></span>'
+'<span class="sidebar"><span class="yt-pl-sidebar-content yt-valign"><span class="yt-valign-container"><span class="formatted-video-count-label"><b>'+rv_pl_length+'</b> videos</span><span class="yt-pl-icon yt-pl-icon-mix yt-sprite"></span></span></span></span>'
+'<span class="yt-pl-thumb-overlay"><span class="yt-pl-thumb-overlay-content"><span class="play-icon yt-sprite"></span><span class="yt-pl-thumb-overlay-text">Play all</span></span></span></span>'
+'<span title="'+rv_pl_title+'" class="title" dir="ltr">'+rv_pl_title+'</span><span class="stat attribution" style="'+rv_pl_author_style+'">by '+rv_pl_author+'</span></a></li>';
}
$( "ul#watch-related" ).append( rv_html );
});
}
}
}
});
}
}
}
function worker_js_create( url , embedded ) {
debugLog("worker_js_create function called with embedded ="+embedded+" AND url ="+url);
var VIDEO_ID=get_video_id_from_yturl(url);
if (use_dialog == 1){
target_node = prepare_dialog_and_return_node(false);
} else {
target_node = prepare_element_and_return_node(false,"#player-api","#error-screen,#player-unavailable,#verify");
}
var my_js_1= "var ytplayer = ytplayer || {};";
if (yt_autostart == 1){
my_js_1+= ' function onPlayerReady(event) {'
+' event.target.playVideo();'
+'}';
}
my_js_1+= "yt.setConfig=function (){ ytplayer.config = {'VIDEO_ID': \""+VIDEO_ID+"\"};";
my_js_1+="ytplayer.config['args']={'autoplay':"+yt_autostart+",'rel':"+yt_showrelated+",";
if (embedded === false) {
my_js_1+= "'c':'WEB',";
} else {
my_js_1+= "'c':'WEB_EMBEDDED_PLAYER','el':'embedded',";
}
my_js_1+="'video_id':\""+VIDEO_ID+"\"};"
my_js_1+="}";
ytbypass_addScript(document.body, my_js_1,null,"worker_js_create_1");
var my_js_2='ytplayer.load = function() {'
+' yt.player.Application.create("'+target_node+'", ytplayer.config);'
+' ytplayer.config.loaded = true;'
+'};';
my_js_2+= ''
+'writeEmbed = function() {'
+' ytplayer.load();console.log("writeEmbed called");'
+'};yt.setConfig();writeEmbed();dummy_string=null;';
ytbypass_addScript(document.body, my_js_2, null, "worker_js_create_2");
$('div.html5-video-player').eq(0).attr("id","movie_player");
check_and_fill_rvs (VIDEO_ID);
}
function worker_http_request( url , base_tag_needed ) {
debugLog("worker_http_request function called with url ="+url);
//alert(url); return false; // for debug
GM_xmlhttpRequest({
method: "GET",
headers: {
"User-Agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
},
url: url,
onload: function( response ) {
if ( response.status == 200 ) {
if( response.finalUrl.match( "/verify_controversy" ) ) {
window.location.href = url + "&skipcontrinter=1";
} else {
result=response.responseText;
result = result.replace(/(<head[^>]*>)([ \t]*)([\r]?[\n]?)/ig, '$1$2$3<meta name="GM_PAGE_CHANGED" content="YES">$3');
if (base_tag_needed && !(/<base /i.test(response.responseText)) && response.finalUrl) {
result = result.replace(/(<head[^>]*>)([ \t]*)([\r]?[\n]?)/ig, '$1$2$3<base href="'+response.finalUrl+'">$3');
replace_my_page(result);
} else {
replace_my_page(result);
}
}
}
}
});
}
function get_video_id_from_yturl (yturl) {
var parser = document.createElement('a');
parser.href = yturl;
return loadStringVar("v", parser.search);
}
function loadStringVar (sVar, mystring) {
if ( !(/^[&?]/.test(mystring)) ) {
mystring="?"+mystring;
}
return unescape(mystring.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
function loadPageVar (sVar) {
return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
function replace_my_page(resultHTML){
unsafeWindow.my_resultHTML=resultHTML;
replace_js='document.open( "text/html", "replace" );'+"\r\n"
+'document.write(my_resultHTML);'+"\r\n"
+'document.close();'+"\r\n";
ytbypass_addScript(document.body, replace_js);
}
function urldecode(str) {
// discuss at: http://phpjs.org/functions/urldecode/
return decodeURIComponent((str + '')
.replace(/%(?![\da-f]{2})/gi, function() {
// PHP tolerates poorly formed escape sequences
return '%25';
})
.replace(/\+/g, '%20'));
}
// Function : ytbypass_addScript()
// Source: http://userscripts.org/groups/51
function ytbypass_addScript(body, js, link, id) {
if (!body){
var body = document.body;
}
if (document.getElementById(id)){
return;
}
script = document.createElement('script');
if (!body) return;
script.type = 'text/javascript';
if ( (js=='') && (link!='') ){
script.src = link;
} else {
script.textContent = js;
}
if (id != "") {
script.id=id;
}
body.appendChild(script);
//return script;
}
function are_we_on_youtube(url) {
if (!(typeof url === 'string' || url instanceof String)){
url = window.location.href;
}
if (url && url.match( /^\/|(https?:\/\/([^\/]+\.)?youtube\.com(\/|$))/i ) ){
return true;
}
return false;
}
function is_it_bypass_page() {
if (document.getElementById( "verify" )) {
return true;
}
if (document.getElementById('watch7-player-age-gate-content')) {
return true;
}
if ($("ytd-button-renderer.ytd-player-error-message-renderer").length>0) {
return true;
}
if (document.getElementsByTagName( "ytd-player-error-message-renderer" ).length>0) {
return true;
}
return false;
}
function is_it_already_processed() {
if ((typeof window.please_no_more_action !== "undefined") && (window.please_no_more_action === true)) {
debugLog("DEBUG: ALREADY PROCESSED: SECTION 1");
return true;
}
if ( window.location.pathname.match("/verify_controversy") ) { // there should be link to click.
debugLog("DEBUG: ALREADY PROCESSED: SECTION 2");
return true;
}
if ( $( "a[data-sessionlink*='feature=private_video']" ).length > 0 ) { // this is private video? we can not access private videos.
debugLog("DEBUG: ALREADY PROCESSED: SECTION 3");
return true;
}
if ( $('meta[name="GM_PAGE_CHANGED"]').attr("content")=="YES" ) { // googlebot method applied..
debugLog("DEBUG: ALREADY PROCESSED: SECTION 4");
return true;
}
if ( $("video").length>0 ) { // there is already a video in page..
debugLog("DEBUG: ALREADY PROCESSED: SECTION 5");
return true;
}
if ( $('iframe#ytplayer').length > 0 ) {
debugLog("DEBUG: ALREADY PROCESSED: SECTION 6");
return true;
}
if ( $( "script:contains('dummy_string')" ).length>0 ) { // this is important
debugLog("DEBUG: ALREADY PROCESSED: SECTION 7");
return true;
}
return false;
}
function helloworld(){
debugLog("helloworld function called");
create_world();
jQuery( "a.spf-link" ).removeClass( "spf-link" );
if( url && are_we_on_youtube(url) ){
my_url = url;
} else {
my_url = window.location.href;
}
if (typeof base_tag_needed == "undefined") {
base_tag_needed = false;
}
if ( is_it_bypass_page() ) {
debugLog("DEBUG: SECTION HELLO 1");
//debugLog("ytd-player-error-message-renderer="+document.getElementsByTagName( "ytd-player-error-message-renderer" ).length);
// notice: it re-executes the script when we replace the page. WTF?!?
if ( is_it_already_processed()===false ){
//remove_all_players(); // may cause duplicated audio
pause_all_players(); // Thanks to Polymer, videos need to be paused manually
if ( bypass_method == 1 ) {
debugLog("DEBUG: FUNC CALL AT HELLO.1-1");
worker_http_request(my_url, base_tag_needed);
} else if ( bypass_method == 2 ) {
debugLog("DEBUG: FUNC CALL AT HELLO.1-2");
worker_html_create(my_url);
} else if ( bypass_method == 3 ) { // 3
debugLog("DEBUG: FUNC CALL AT HELLO.1-3");
worker_js_create(my_url,method3_embedded);
} else if ( bypass_method == 4 ) { // 4
debugLog("DEBUG: FUNC CALL AT HELLO.1-4");
worker_html_create(my_url, true);
} else {
debugLog("ERROR: unknown bypass method selected");
}
window.please_no_more_action = true;
$("head").append('<meta name="GM_PAGE_CHANGED" content="YES"/>');
}
}
debugLog("DEBUG: AT HELLOWORLD EXIT");
}
// unwraps the element so we can use its methods freely
function unwrap(elem) {
if (elem) {
if ( typeof XPCNativeWrapper === 'function' && typeof XPCNativeWrapper.unwrap === 'function' ) {
return XPCNativeWrapper.unwrap(elem);
} else if (elem.wrappedJSObject) {
return elem.wrappedJSObject;
}
}
return elem;
}
var uw;
// get the raw window object of the YouTube page
uw = typeof unsafeWindow !== 'undefined' ? unsafeWindow : unwrap(window);
// disable Red Bar aka SPF
if (disable_spf==1){
uw._spf_state = uw._spf_state || {};
uw._spf_state.enabled = false;
uw._spf_state.config = uw._spf_state.config || {};
uw._spf_state.config['navigate-limit'] = 0;
uw._spf_state.config['reload-identifier'] =null;
uw.ytspf = uw.ytspf || {};
uw.ytspf.enabled = false;
uw.ytspf.config = uw.ytspf.config || {};
uw.ytspf.config['navigate-limit'] = 0;
/*disable_spf=function(stateobj,title,url){
var a = document.createElement('a');
a.href = url;
if (window.location.href!=a.href){
$('body').fadeOut("normal", function() {
$(this).remove();
});
window.location.assign(url);
}
}
history.pushState=disable_spf;
history.replaceState=disable_spf;*/
if (typeof ytcfg != "undefined" && typeof ytcfg.data_.EXPERIMENT_FLAGS.pbj_navigate_limit != "undefined") {
ytcfg.data_.EXPERIMENT_FLAGS.pbj_navigate_limit=0
}
}
$( window ).load(helloworld);
window.addEventListener("yt-page-data-updated", helloworld_caller, false);
window.addEventListener("yt-navigate-start", helloworld_caller, false);
window.addEventListener("yt-navigate-finish", helloworld_caller, false);
window.addEventListener("popstate", helloworld_caller, false);
window.addEventListener("spfdone", helloworld_caller, false);
window.addEventListener("spfpartdone", helloworld_caller, false);
helloworld();
function helloworld_caller() {
//setTimeout(helloworld,1000);
helloworld();
}
debugLog("DEBUG: AT EXIT");
function updateQueryStringParameter(uri, key, value) {
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
} else {
return uri + separator + key + "=" + value;
}
}
function start() {
var cookie = getPref(),
pref = "f6=8";
if(cookie === "fIsAlreadySet") {
return;
} else if(cookie !== "noPref"){
for(var i = 0; i < cookie.length; ++i) {
pref = pref + "&" + cookie[i].key + "=" + cookie[i].value;
}
}
changePref(pref);
}
function changePref(values) {
var d = new Date();
d.setTime(d.getTime() + (100*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = "PREF=" + values + ";" + expires + ";domain=.youtube.com;hostonly=false;path=/";
location.reload();
}
function getPref() {
var cookie = document.cookie,
splitC = cookie.split(";");
for(var i = 0; i < splitC.length; ++i) {
if(splitC[i].trim().indexOf("PREF") === 0) {
if(splitC[i].trim().indexOf("f6=8") > -1) {
return "fIsAlreadySet";
}
var c = [],
splitValues = splitC[i].substring(5).split("&");
for(var k = 0; k < splitValues.length; ++k) {
var splitV = splitValues[k].split("=");
if(splitV[0] !== "f6") {
var kv = {};
kv.key = splitV[0];
kv.value = splitV[1];
c.push(kv);
}
}
return c;
}
}
return "noPref";
}
if (disable_material==1){ start(); }