// ==UserScript== // @name YouTube download link // @namespace www.pberndt.com // @description Adds a download link (including the t= parameter) to YouTube videos // @include * // ==/UserScript== var download_url = 'http://youtube.com/get_video?video_id='; var tube_url = 'http://youtube.com/watch?v='; if(document.location.href.match(/www.youtube.com/)) var players = document.evaluate("//embed[contains(@src, 'video_id')]", document, null, XPathResult.ANY_TYPE, null); else var players = document.evaluate("//embed[contains(@src, 'http://www.youtube.com/')]", document, null, XPathResult.ANY_TYPE, null); var player = players.iterateNext(); while(player) { if(player.src.match(/video_id=([^(\&|$)]*)/)) var video_id = player.src.match(/video_id=([^(\&|$)]*)/)[1]; else var video_id = player.src.match(/v\/([^(\&|$)]*)/)[1]; GM_xmlhttpRequest({ method: "GET", url: tube_url + video_id, onload: function(details) { var t = details.responseText.match(/&t=([^&"]+)/)[1]; var v = details.responseText.match(/\?v=([^&"]+)/)[1]; var player = document.evaluate("//embed[contains(@src, '" + v + "')]", document, null, XPathResult.ANY_TYPE, null); player = player.iterateNext(); var newSrc = download_url + v + "&t=" + t; var link = document.createElement("a"); link.innerHTML = "Download"; link.href = newSrc; player.parentNode.insertBefore(link, player.nextSibling); }}); player = players.iterateNext(); }