Ajoute un bouton de téléchargement sous les vidéos et images sur YouTube, Instagram, Twitter et TikTok
当前为
// ==UserScript==
// @name MS Downloader
// @namespace https://greasyfork.org/users/1429467
// @version 1.0
// @description Ajoute un bouton de téléchargement sous les vidéos et images sur YouTube, Instagram, Twitter et TikTok
// @author Lakfu Sama
// @match *://*.youtube.com/*
// @match *://*.instagram.com/*
// @match *://*.twitter.com/*
// @match *://*.tiktok.com/*
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
let autoShowButtons = true; // Par défaut, les boutons DL sont visibles
// Fonction pour créer un bouton de téléchargement
function createDownloadButton(url) {
let button = document.createElement("button");
button.innerText = "DL";
button.style.position = "absolute";
button.style.top = "5px";
button.style.right = "5px";
button.style.backgroundColor = "rgba(0, 0, 0, 0.7)";
button.style.color = "white";
button.style.border = "none";
button.style.padding = "5px 10px";
button.style.borderRadius = "5px";
button.style.cursor = "pointer";
button.style.fontSize = "12px";
button.style.zIndex = "1000";
button.style.opacity = "0.8";
button.style.transition = "opacity 0.2s";
button.style.display = autoShowButtons ? "block" : "none";
// Effet de survol pour rendre le bouton plus visible
button.onmouseover = () => button.style.opacity = "1";
button.onmouseout = () => button.style.opacity = "0.8";
// Action du bouton pour télécharger la vidéo
button.onclick = () => {
if (url.startsWith("blob:")) {
alert("Le téléchargement de vidéos blob n'est pas supporté directement. Utilisez un outil de téléchargement adapté.");
} else {
let a = document.createElement("a");
a.href = url;
a.download = "video.mp4"; // Nom générique pour le fichier
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
};
return button;
}
// Fonction pour ajouter le bouton de téléchargement uniquement pour les vidéos valides
function addDownloadButtons() {
console.log("Recherche de vidéos...");
// Vérification des vidéos dans les balises <video>
document.querySelectorAll("video").forEach(video => {
if (!video.dataset.hasDownloadButton && video.src) {
// Affiche une vidéo valide dans la console pour le debug
console.log("Vidéo trouvée: ", video.src);
// Vérifie si la vidéo a une source MP4 ou WebM
if (video.src.includes(".mp4") || video.src.includes(".webm")) {
let button = createDownloadButton(video.src);
video.style.position = "relative";
video.parentNode.appendChild(button);
video.dataset.hasDownloadButton = "true";
}
}
});
// Vérification des vidéos intégrées dans les <iframe> (ex. YouTube)
document.querySelectorAll("iframe").forEach(iframe => {
if (!iframe.dataset.hasDownloadButton && iframe.src) {
// Affiche les iframes pour le debug
console.log("Iframe trouvée: ", iframe.src);
// Vérifie si l'iframe contient une vidéo YouTube
if (iframe.src.includes("youtube.com/embed/")) {
let videoUrl = iframe.src.replace("https://www.youtube.com/embed/", "https://www.youtube.com/watch?v=");
let button = createDownloadButton(videoUrl);
iframe.style.position = "relative";
iframe.parentNode.appendChild(button);
iframe.dataset.hasDownloadButton = "true";
}
}
});
}
// Observer pour les vidéos chargées dynamiquement (scroll infini)
const observer = new MutationObserver(addDownloadButtons);
observer.observe(document.body, { childList: true, subtree: true });
// Touche "D" pour afficher/cacher les boutons DL
document.addEventListener('keydown', function(event) {
if (event.key.toLowerCase() === 'd') {
autoShowButtons = !autoShowButtons;
document.querySelectorAll("button").forEach(button => {
if (button.innerText === "DL") {
button.style.display = autoShowButtons ? "block" : "none";
}
});
}
});
console.log("Script DL activé :\n[D] Afficher/Cacher les boutons de téléchargement");
})();