您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Ajoute des boutons pour télécharger des vidéos via Y2Mate (version française) et SaveTheVideo (pour X/Twitter), avec une option pour les masquer via un raccourci clavier
当前为
// ==UserScript== // @name Bouton Téléchargement Multi-Sites (Y2Mate, SaveTheVideo) // @namespace https://gf.qytechs.cn/ // @version 1.6 // @description Ajoute des boutons pour télécharger des vidéos via Y2Mate (version française) et SaveTheVideo (pour X/Twitter), avec une option pour les masquer via un raccourci clavier // @author Lakfu Sama // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; let isButtonVisible = true; function addDownloadButtons() { const videos = document.querySelectorAll('video'); if (videos.length === 0) return; videos.forEach(video => { if (video.dataset.hasDownloadButtons) return; video.dataset.hasDownloadButtons = true; const container = document.createElement('div'); container.style.position = 'absolute'; container.style.top = '10px'; container.style.right = '10px'; container.style.zIndex = '1000'; container.style.display = 'flex'; container.style.flexDirection = 'column'; container.style.gap = '5px'; // Bouton pour Y2Mate const y2mateButton = document.createElement('button'); y2mateButton.innerText = 'Télécharger via Y2Mate (FR)'; y2mateButton.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; y2mateButton.style.color = 'white'; y2mateButton.style.border = 'none'; y2mateButton.style.padding = '8px 12px'; y2mateButton.style.fontSize = '12px'; y2mateButton.style.cursor = 'pointer'; y2mateButton.style.borderRadius = '5px'; y2mateButton.style.opacity = '0.8'; y2mateButton.onmouseenter = () => { y2mateButton.style.opacity = '1'; }; y2mateButton.onmouseleave = () => { y2mateButton.style.opacity = '0.8'; }; y2mateButton.onclick = () => openY2Mate(video); container.appendChild(y2mateButton); // Bouton pour SaveTheVideo (X/Twitter) const saveTheVideoButton = document.createElement('button'); saveTheVideoButton.innerText = 'Télécharger via SaveTheVideo (X/Twitter)'; saveTheVideoButton.style.backgroundColor = 'rgba(0, 0, 0, 0.7)'; saveTheVideoButton.style.color = 'white'; saveTheVideoButton.style.border = 'none'; saveTheVideoButton.style.padding = '8px 12px'; saveTheVideoButton.style.fontSize = '12px'; saveTheVideoButton.style.cursor = 'pointer'; saveTheVideoButton.style.borderRadius = '5px'; saveTheVideoButton.style.opacity = '0.8'; saveTheVideoButton.onmouseenter = () => { saveTheVideoButton.style.opacity = '1'; }; saveTheVideoButton.onmouseleave = () => { saveTheVideoButton.style.opacity = '0.8'; }; saveTheVideoButton.onclick = () => openSaveTheVideo(video); container.appendChild(saveTheVideoButton); video.parentNode.style.position = 'relative'; video.parentNode.appendChild(container); }); } function openY2Mate(video) { let videoUrl = video.querySelector('source')?.src || video.src; if (!videoUrl) { alert('Impossible de détecter la vidéo'); return; } if (window.location.hostname.includes('youtube.com')) { const videoId = new URLSearchParams(window.location.search).get('v'); if (videoId) { // Version française de Y2Mate pour YouTube window.open(`https://www.y2mate.com/fr/youtube/${videoId}`, '_blank'); return; } } alert("Ce site ne permet pas la récupération directe via Y2Mate."); } function openSaveTheVideo(video) { let videoUrl = video.querySelector('source')?.src || video.src; if (!videoUrl) { alert('Impossible de détecter la vidéo'); return; } // Vérification si l'URL provient de X (anciennement Twitter) if (window.location.hostname.includes('x.com')) { // Extraire l'URL du tweet depuis les liens const tweetUrl = extractTweetUrl(); if (tweetUrl) { window.open(`https://www.savethevideo.com/?url=${encodeURIComponent(tweetUrl)}`, '_blank'); return; } else { alert('Impossible de récupérer l\'URL du tweet.'); } } alert("Ce site ne permet pas la récupération directe via SaveTheVideo."); } function extractTweetUrl() { // Chercher tous les liens sur la page et vérifier s'il s'agit d'un lien vers un tweet const links = document.querySelectorAll('a'); for (const link of links) { const href = link.href; if (href && href.includes('/i/status/')) { // Si l'URL correspond à un tweet (ex: /i/status/1691880588549017817) return href.startsWith('http') ? href : `https://x.com${href}`; } } return null; // Aucun lien de tweet trouvé } function observeDOMChanges() { const observer = new MutationObserver(addDownloadButtons); observer.observe(document.body, { childList: true, subtree: true }); } function toggleButtonsVisibility() { isButtonVisible = !isButtonVisible; document.querySelectorAll('div').forEach(container => { if (container.childNodes.length && container.childNodes[0].innerText.includes('Télécharger via')) { container.style.display = isButtonVisible ? 'block' : 'none'; } }); } document.addEventListener('keydown', (event) => { if (event.key === 'h') { // Appuyer sur 'h' pour masquer/afficher les boutons toggleButtonsVisibility(); } }); window.addEventListener('load', () => { addDownloadButtons(); observeDOMChanges(); }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址