您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Bypass age/content restrictions on YouTube
- // ==UserScript==
- // @name YouTube Restriction Bypass
- // @namespace https://greasyfork.org/en/users/305931-emerson-bardusco
- // @version 1.7
- // @description Bypass age/content restrictions on YouTube
- // @author EmersonxD
- // @match *://*.youtube.com/*
- // @grant none
- // @run-at document-start
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- var config = {
- proxyHost: 'https://youtube-proxy.zerody.one',
- validStatuses: ['OK', 'LIVE_STREAM_OFFLINE'],
- unlockableStatuses: ['AGE_VERIFICATION_REQUIRED', 'CONTENT_CHECK_REQUIRED']
- };
- var nativeXHR = XMLHttpRequest.prototype.open;
- var nativeJSON = JSON.parse;
- function log() {
- var args = Array.prototype.slice.call(arguments);
- console.log('[Bypass] ' + args.join(' '));
- }
- function isGoogleVideo(url) {
- return url.host.indexOf('.googlevideo.com') > -1;
- }
- function needsProxy(url) {
- return url.search.indexOf('gcr=') > -1;
- }
- function buildProxyUrl(url) {
- return config.proxyHost + '/direct/' + btoa(url.href);
- }
- function modifyRequest(url) {
- if (!isGoogleVideo(url)) return url.href;
- if (!needsProxy(url)) return url.href;
- try {
- return buildProxyUrl(url);
- } catch(e) {
- log('Error modifying request:', e.message);
- return url.href;
- }
- }
- function unlockPlayer(data) {
- var status = data.playabilityStatus;
- if (status && config.unlockableStatuses.indexOf(status.status) > -1) {
- status.status = 'OK';
- status.reason = '';
- log('Player unlocked');
- }
- return data;
- }
- function unlockResponse(data) {
- var content = data.contents;
- if (content && content.twoColumnWatchNextResults && content.twoColumnWatchNextResults.secondaryResults) {
- content.twoColumnWatchNextResults.secondaryResults = {
- secondaryResults: {
- results: []
- }
- };
- log('Sidebar cleaned');
- }
- return data;
- }
- function processJSON(data) {
- try {
- return unlockResponse(unlockPlayer(data));
- } catch(e) {
- log('Processing error:', e.message);
- return data;
- }
- }
- XMLHttpRequest.prototype.open = function(method, url) {
- var newUrl = modifyRequest(new URL(url));
- var args = [method, newUrl || url].concat(Array.prototype.slice.call(arguments, 2));
- nativeXHR.apply(this, args);
- };
- JSON.parse = function(text) {
- return processJSON(nativeJSON.call(this, text));
- };
- log('Initialized');
- })();