Skip to content

Instantly share code, notes, and snippets.

@yasirkula
Last active November 28, 2022 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yasirkula/efbb784ad49c304794f0be66560d8f47 to your computer and use it in GitHub Desktop.
Save yasirkula/efbb784ad49c304794f0be66560d8f47 to your computer and use it in GitHub Desktop.
Restore fullscreen button on embedded YouTube videos (Chrome Extension)
var checkDocument = function( doc )
{
var frames = doc.getElementsByTagName( "iframe" );
for( var i = 0, l = frames.length; i < l; i++ )
checkIframe( frames[i] );
};
var checkIframe = function(iframe)
{
if( iframe.src.indexOf( "https://www.youtube" ) == 0 )
{
iframe.src = iframe.src.replace( "?fs=0", "" ).replace( "&fs=0", "" ).replace( "?controls=0", "?controls=1" ).replace( "&controls=0", "&controls=1" );
iframe.setAttribute( "allowfullscreen", "0" );
if( iframe.hasAttribute( "donotallowfullscreen" ) )
iframe.removeAttribute( "donotallowfullscreen" );
}
else if( iframe.hasAttribute( "data-src" ) && iframe.getAttribute( "data-src" ).indexOf( "https://www.youtube" ) == 0 )
{
iframe.setAttribute( "data-src", iframe.getAttribute( "data-src" ).replace( "?fs=0", "" ).replace( "&fs=0", "" ).replace( "?controls=0", "?controls=1" ).replace( "&controls=0", "&controls=1" ) );
iframe.setAttribute( "allowfullscreen", "0" );
if( iframe.hasAttribute( "donotallowfullscreen" ) )
iframe.removeAttribute( "donotallowfullscreen" );
}
else if( iframe.src.indexOf( "https://twitter.com" ) == 0 )
{
// Support for YouTube embedded videos on Twitter
if( iframe.src.indexOf( "cardname=player" ) > 0 )
iframe.addEventListener( "load", iframeLoaded );
}
};
var iframeLoaded = function( e )
{
e.target.removeEventListener( "load", iframeLoaded );
checkDocument( e.target.contentDocument || e.target.contentWindow.document );
};
var observerCallback = function( mutationsList, observer )
{
for( var mutation of mutationsList )
{
if( mutation.type == 'childList' )
{
var addedNodes = mutation.addedNodes;
for( var i = 0; i < addedNodes.length; i++ )
{
if( addedNodes[i].nodeName == "IFRAME" )
checkIframe( addedNodes[i] );
}
}
}
};
checkDocument( document );
var observer = new MutationObserver( observerCallback );
observer.observe( document.body, { childList: true, subtree: true } );
{
"manifest_version": 2,
"name": "YouTube Fullscreen Button",
"version": "1.0",
"description": "Bring back the fullscreen button to embedded YouTube videos",
"content_scripts": [{
"js": ["content.js"],
"matches": ["https://*/*", "http://*/*"]
}]
}
@yasirkula
Copy link
Author

How To

  1. create an empty directory
  2. put both of these files into that directory
  3. open Chrome's Extensions page
  4. enable Developer mode from top-right corner
  5. click the Load unpacked button and select the directory you've created
  6. all done! Enjoy!

@yasirkula
Copy link
Author

UPDATE: restored the fullscreen button on embedded YT videos on Twitter.

@ashergz
Copy link

ashergz commented Nov 28, 2022

This isn't doing anything.

@yasirkula
Copy link
Author

@ashergz I haven't used this extension in a long while so I can't concur myself but I believe you. Probably this feature's format has changed (i.e. it's no longer "fs=0" or "controls=0"). I am not planning to update this gist soon but thank you for letting future readers know about this issue 🙂)

@ashergz
Copy link

ashergz commented Nov 28, 2022

Speaking of those who stumble here in search of a solution, here's one that actually works: https://greasyfork.org/en/scripts/829-restore-youtube-embed-defaults

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment