Replaces Leave YouTube Warning Links with just the link
// ==UserScript==
// @name YouTube outgoing external hyper links fixer
// @version 1.0.0
// @description Replaces Leave YouTube Warning Links with just the link
// @author bigguy
// @match https://www.youtube.com/*
// @grant none
// @license GPLv3+
// @namespace https://greasyfork.org/users/771007
// ==/UserScript==
(function() {
'use strict';
// from https://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function replaceLinks(ms=3000) {
console.log('replacing bad youtube links')
await sleep(ms); // bit of a hack: seems we need to wait for YouTube to do its stuff before we act
let outgoing_links = document.querySelectorAll('a[href^="https://www.youtube.com/redirect"]');
for (let i = 0; i < outgoing_links.length; i++) {
let original_destination = outgoing_links[i].href;
let new_destination = decodeURIComponent(original_destination.split("&").filter(arg => arg.startsWith("q="))[0].substring(2));
outgoing_links[i].href = new_destination;
outgoing_links[i].data = null; // remove some YouTube specific stuff that tries to open youtube.com/redirect on click
}
//let outgoing_links2 = document.querySelectorAll('a.yt-simple-endpoint:not([href^="http"]')
//let outgoing_links2 = document.getElementsByTagName('a')
let outgoing_links2 = document.querySelectorAll('a:not([href]')
for (let i = 0; i < outgoing_links2.length; i++) {
if ((outgoing_links2[i].innerText.startsWith('https://') || outgoing_links2[i].innerText.startsWith('http://'))){
console.log(outgoing_links2[i].innerText)
console.log(outgoing_links2[i])
outgoing_links2[i].href = outgoing_links2[i].innerText;
}
}
}
window.addEventListener('yt-navigate-finish', replaceLinks );
//window.addEventListener('ytd-continuation-item-renderer', replaceLinks );
//window.addEventListener('onclick', replaceLinks );
document.ondblclick = function () {
replaceLinks(0)
}
})();