您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Blocks the distracting youtube site by completely frogifying the youtube experience.
// ==UserScript== // @name FrogTube YouTube // @namespace Violentmonkey Scripts // @match https://www.youtube.com/* // @grant none // @version 1.0 // @author SneakySquid // @description Blocks the distracting youtube site by completely frogifying the youtube experience. // ==/UserScript== (function () { 'use strict'; const frogImages = [ 'https://images.pexels.com/photos/35669/hyla-meridionalis-the-frog-amphibians.jpg?cs=srgb&dl=pexels-pixabay-35669.jpg&fm=jpg' ,'https://images.pexels.com/photos/70083/frog-macro-amphibian-green-70083.jpeg', 'https://images.pexels.com/photos/2631482/pexels-photo-2631482.jpeg?cs=srgb&dl=pexels-couleur-2631482.jpg&fm=jpg', 'https://images.pexels.com/photos/63650/frog-toad-eyes-animal-63650.jpeg?cs=srgb&dl=pexels-pixabay-63650.jpg&fm=jpg', 'https://images.pexels.com/photos/13801172/pexels-photo-13801172.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://images.pexels.com/photos/23645284/pexels-photo-23645284.jpeg?cs=srgb&dl=pexels-alejandro-orozco-211352387-23645284.jpg&fm=jpg', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSbacq0DjQ6T-EUkyB6Q_lbRR32DycakHPHDg&s', 'https://images.pexels.com/photos/122430/frog-water-frog-animal-green-122430.jpeg?cs=srgb&dl=pexels-pixabay-122430.jpg&fm=jpg', 'https://images.pexels.com/photos/3656636/pexels-photo-3656636.jpeg?cs=srgb&dl=pexels-lucioarantesph-3656636.jpg&fm=jpg', 'https://images.pexels.com/photos/14355607/pexels-photo-14355607.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://images.pexels.com/photos/16673609/pexels-photo-16673609/free-photo-of-blue-poison-dart-frogs.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ-UJaggqNbPnQaJnYPvLOOK0BW7gHfqPQAXA&s', 'https://images.pexels.com/photos/20898083/pexels-photo-20898083/free-photo-of-frog-head-in-water.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://images.pexels.com/photos/30984271/pexels-photo-30984271/free-photo-of-green-tree-frog-on-mossy-branch-in-france.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', 'https://images.pexels.com/photos/8807478/pexels-photo-8807478.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500', ]; const titles1 = [ "cute moment: ", "adorable sighting: ", "you won't beleive that ", "this was epic: ", "photographer captures moment when ", "incredible footage of ", "amazing video of ", "incredible sighting of ", "incredible moment: ", ]; const titles2 = [ "a frog", "a toad", "a tree frog", "a poison dart frog", "a green frog", "a red-eyed tree frog", "a blue poison dart frog", "a golden poison dart frog", "a common frog", "a bullfrog", "a leopard frog", "a wood frog", "a green tree frog", ]; const titles3 = [ "was caught", "was seen", "was found", "was reported", "was spotted", "was filmed", "was reported", ]; const titles4 = [ " in the wild", " in its natural habitat", " in a pond", " in a garden", " in a rainforest", " in a backyard", " in a park", " in a swamp", " in a river", " in a lake", " in a forest", ]; const titles5 = [ "eating a bug", "jumping into a pond", "hopping around", "sitting on a leaf", "catching a fly", "sitting on a lily pad", "relaxing on a rock", "chilling on a branch", "doing froggy things", "hiding in the grass", ] function getRandomImage() { return frogImages[Math.floor(Math.random() * frogImages.length)]; } function generateRandomTitle() { const part1 = titles1[Math.floor(Math.random() * titles1.length)]; const part2 = titles2[Math.floor(Math.random() * titles2.length)]; const part3 = titles3[Math.floor(Math.random() * titles3.length)]; const part4 = titles4[Math.floor(Math.random() * titles4.length)]; const part5 = titles5[Math.floor(Math.random() * titles5.length)]; return `${part1}${part2} ${part3}${part4} ${part5}`; } const names = [ "Frog spotter", "Toad Tracker", "Amphibian Observer", "Frog Enthusiast", "The Daily Croak", "Frog News", ]; function getRandomName() { return names[Math.floor(Math.random() * names.length)]; } function replaceChannelNames() { const channels = document.querySelectorAll('ytd-channel-name a, .ytd-channel-name a, ytd-video-renderer ytd-channel-name, ytd-video-owner-renderer a'); channels.forEach(el => { if (!el || el.dataset.frogified === "true") return; el.textContent = getRandomName(); el.dataset.frogified = "true"; }); } function replaceLogoText() { const logoText = document.querySelector('yt-formatted-string#logo-text, #logo a span, #logo a'); if (logoText && !logoText.dataset.frogified) { logoText.textContent = "FrogTube"; logoText.dataset.frogified = "true"; } } function applyFrogImage(img) { if (!img || img.dataset.frogified === "true") return; const newSrc = getRandomImage(); img.src = newSrc; img.dataset.frogified = "true"; const observer = new MutationObserver(() => { if (img.src !== newSrc) { img.src = newSrc; } }); observer.observe(img, { attributes: true, attributeFilter: ['src'] }); } function applyFrogTitle(el) { if (!el || el.dataset.frogified === "true") return; el.textContent = generateRandomTitle(); el.dataset.frogified = "true"; } function frogification() { const allImgs = document.querySelectorAll('img.yt-core-image, ytd-thumbnail img'); allImgs.forEach(applyFrogImage); const ytShadows = document.querySelectorAll('yt-img-shadow:not(.frogified)'); ytShadows.forEach(shadow => { const innerImg = shadow.querySelector('img'); if (innerImg) applyFrogImage(innerImg); shadow.classList.add('frogified'); }); const thumbs = document.querySelectorAll('ytd-thumbnail:not(.frogified), #thumbnail:not(.frogified)'); thumbs.forEach(thumb => { const bgImg = getRandomImage(); thumb.style.backgroundImage = `url("${bgImg}")`; thumb.style.backgroundSize = 'cover'; thumb.style.backgroundPosition = 'center'; thumb.classList.add('frogified'); }); const titles = document.querySelectorAll('#video-title, a.yt-simple-endpoint.style-scope.ytd-video-renderer'); titles.forEach(applyFrogTitle); replaceChannelNames(); replaceLogoText(); } setTimeout(() => { frogification(); const observer = new MutationObserver(() => { frogification(); }); observer.observe(document.body, { childList: true, subtree: true }); setInterval(frogification, 3000); }, 2000); })();