Fix youtube whitescreen

This commit is contained in:
Andrey Meshkov
2020-10-05 16:48:37 +03:00
parent a783fea2e2
commit 13b9a0fbbd
2 changed files with 19 additions and 9 deletions

View File

@@ -171,13 +171,28 @@ youtube.com###related > ytd-watch-next-secondary-results-renderer > #items > ytd
youtube.com###watch7-branded-banner
youtube.com##ytd-promoted-sparkles-web-renderer
youtube.com##ytd-search-pyv-renderer
! Youtube whitescreen fix
youtube-nocookie.com,youtube.com#%#//scriptlet("json-prune", "adPlacements playerAds")
!
! START: Youtube whitescreen fix
!
! TODO: replace the JS rule with a json-prune scriptlet
! TODO: check that set-constant for ytInitialPlayerResponse.adPlacements is really necessary
!
! This one handles an XHR request for YT player data
! smart JSON override: https://gist.github.com/ameshkov/0c5148f243ffe9d8e40fd9ee11f142f4
! smartJSONParseOverride('adPlacements', [], /.*/);
! smartJSONParseOverride('playerAds', [], /.*/);
youtube-nocookie.com,youtube.com#%#(function(){var overrideObject=function(obj,propertyName,overrideValue){var overriden=false;for(var key in obj)if(obj.hasOwnProperty(key)&&key===propertyName){obj[key]=overrideValue;overriden=true}else if(obj.hasOwnProperty(key)&&typeof obj[key]==="object")if(overrideObject(obj[key],propertyName,overrideValue))overriden=true;return overriden};var smartJSONParseOverride=function(propertyName,overrideValue,reStack){var realParse=JSON.parse;JSON.parse=function(text,reviver){var obj=realParse(text,reviver);if(!obj)return obj;var stackTrace=(new Error).stack;if(reStack.test(stackTrace))if(overrideObject(obj,propertyName,overrideValue));return obj}};smartJSONParseOverride("adPlacements",[],/.*/);smartJSONParseOverride("playerAds",[],/.*/)})();
! This one might be needed when the page is loaded for the first time
youtube-nocookie.com,youtube.com#%#//scriptlet('set-constant', 'ytInitialPlayerResponse.adPlacements', 'undefined')
youtube-nocookie.com,youtube.com#%#//scriptlet('set-constant', 'playerResponse.adPlacements', 'undefined')
! This one may be unnecessary:
||youtube.com/get_video_info?*=adunit&$important
! https://github.com/AdguardTeam/AdguardFilters/issues/51453
!+ NOT_OPTIMIZED
||youtube.com/get_video_info?$~third-party,badfilter
!
! END: Youtube whitescreen fix
!
! Fixing embedded video player
! https://github.com/easylist/easylist/issues/5112
! https://github.com/easylist/easylist/commit/3ed65e66e22963dc08a659dce6baa344ff158664

View File

@@ -9,19 +9,14 @@
! YouTube ads (for old and new ads)
! youtube.com - white screen with skip button
! This one works okay.
! smart JSON override: https://gist.github.com/ameshkov/0c5148f243ffe9d8e40fd9ee11f142f4
! smartJSONParseOverride('adPlacements', [], /base.js:[0-9]+/);
! smartJSONParseOverride('playerAds', [], /base.js:[0-9]+/);
! youtube.com#%#(function(){var overrideObject=function(obj,propertyName,overrideValue){var overriden=false;for(var key in obj){if(obj.hasOwnProperty(key)&&key===propertyName){obj[key]=overrideValue;overriden=true}if(obj.hasOwnProperty(key)&&typeof obj[key]==="object")if(overrideObject(obj[key]))overriden=true}return overriden};var smartJSONParseOverride=function(propertyName,overrideValue,reStack){var realParse=JSON.parse;JSON.parse=function(text,reviver){var obj=realParse(text,reviver);if(!obj)return obj;var stackTrace=(new Error).stack;if(reStack.test(stackTrace))if(overrideObject(obj,propertyName,overrideValue));return obj}};smartJSONParseOverride("adPlacements",[],/base.js/);smartJSONParseOverride("playerAds",[],/base.js/)})();
! I am not sure why we need this, commented out
! !#if (!adguard_app_ios && !adguard_ext_android_cb)
! @@||youtube.com/get_video_info
! !#endif
! YT fix using json-prune, prune only 1 level
youtube.com#%#//scriptlet("json-prune", "adPlacements playerAds")
! Commented out - not needed anymore
! youtube.com#%#//scriptlet("json-prune", "adPlacements playerAds")
! These two rules seem to be working okay.
! Commented out for now in order to test the smart override function