// ==UserScript== // @name Simple YouTube Download Button // @namespace https://dunkoyun.com // @version 1.1.2.1 // @description Adds a download button to YouTube videos which allows you to download the MP3 of the video without having to leave the page // @author Onur YASAR // @include http*://*.youtube.com/* // @include http*://youtube.com/* // @include http*://*.youtu.be/* // @include http*://youtu.be/* // @run-at document-end // @downloadURL none // ==/UserScript== function polymerInject(){ /* Create button */ var buttonDiv = document.createElement("div"); buttonDiv.style.width = "100%"; buttonDiv.id = "parentButton"; var addButton = document.createElement("button"); addButton.appendChild(document.createTextNode("OPEN DOWNLOAD SCREEN")); addButton.style.width = "100%"; addButton.style.backgroundColor = "#181717"; addButton.style.color = "white"; addButton.style.textAlign = "center"; addButton.style.padding = "10px 0"; addButton.style.marginTop = "5px"; addButton.style.marginLeft = "5px"; addButton.style.fontSize = "14px"; addButton.style.border = "0"; addButton.style.cursor = "pointer"; addButton.style.borderRadius = "2px"; addButton.style.fontFamily = "Roboto, Arial, sans-serif"; addButton.onclick = function () { this.remove(); /* Add large button on click */ var addIframe = document.createElement("iframe"); addIframe.src = '//embed.yt-mp3.com/watch?v='+ encodeURIComponent(window.location.href) +'&downloadbtn=true'; addIframe.style.width = "100%"; addIframe.style.height = "100px"; addIframe.style.marginTop = "10px"; addIframe.style.overflow = "hidden"; addIframe.scrolling = "no"; var targetElement = document.querySelectorAll("[id='meta']"); for(var i = 0; i < targetElement.length; i++){ if(targetElement[i].className.indexOf("ytd-watch") > -1){ targetElement[i].insertBefore(addIframe, targetElement[i].childNodes[0]); } } }; buttonDiv.appendChild(addButton); /* Find and add to target */ var targetElement = document.querySelectorAll("[id='subscribe-button']"); for(var i = 0; i < targetElement.length; i++){ if(targetElement[i].className.indexOf("ytd-video-secondary-info-renderer") > -1){ targetElement[i].appendChild(buttonDiv); } } /* Fix hidden description bug */ var descriptionBox = document.querySelectorAll("ytd-video-secondary-info-renderer"); if(descriptionBox[0].className.indexOf("loading") > -1){ descriptionBox[0].classList.remove("loading"); } } function standardInject() { var pagecontainer=document.getElementById('page-container'); if (!pagecontainer) return; if (/^https?:\/\/www\.youtube.com\/watch\?/.test(window.location.href)) run(); var isAjax=/class[\w\s"'-=]+spf\-link/.test(pagecontainer.innerHTML); var logocontainer=document.getElementById('logo-container'); if (logocontainer && !isAjax) { // fix for blocked videos isAjax=(' '+logocontainer.className+' ').indexOf(' spf-link ')>=0; } var content=document.getElementById('content'); if (isAjax && content) { // Ajax UI var mo=window.MutationObserver||window.WebKitMutationObserver; if(typeof mo!=='undefined') { var observer=new mo(function(mutations) { mutations.forEach(function(mutation) { if(mutation.addedNodes!==null) { for (var i=0; i -1 && window.location.href.indexOf("watch?") > -1){ var parentButton = document.createElement("div"); parentButton.className = "yt-uix-button yt-uix-button-default"; parentButton.id = "parentButton"; parentButton.style.height = "23px"; parentButton.style.marginLeft = "28px"; parentButton.style.paddingBottom = "1px"; parentButton.onclick = function () { this.remove(); finalButton(); }; document.getElementById("watch7-user-header").appendChild(parentButton); var childButton = document.createElement("span"); childButton.appendChild(document.createTextNode("Download MP3")); childButton.className = "yt-uix-button-content"; childButton.style.lineHeight = "25px"; childButton.style.fontSize = "12px"; parentButton.appendChild(childButton); } } if(document.getElementById("polymer-app") || document.getElementById("masthead") || window.Polymer){ setInterval(function(){ if(window.location.href.indexOf("watch?v=") < 0){ return false; } if(document.getElementById("count") && document.getElementById("parentButton") === null){ polymerInject(); } }, 100); } else{ standardInject(); }