您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display video URLs and allow copying on the webpage while playing videos.
// ==UserScript== // @name Video URL grabber // @namespace https://github.com/Rainman69/video-link-grabber // @version 1.0 // @description Display video URLs and allow copying on the webpage while playing videos. // @author https://t.me/TheErfon // @match *://*/* // @grant GM_addStyle // @license CC BY-NC-ND 4.0 // @licenseURL https://github.com/Rainman69/video-link-grabber/blob/main/LICENSE // ==/UserScript== (function() { 'use strict'; // Create a container for the video URLs var videoURLContainer = document.createElement('div'); videoURLContainer.style.position = 'fixed'; videoURLContainer.style.top = '10px'; videoURLContainer.style.left = '10px'; videoURLContainer.style.padding = '5px'; videoURLContainer.style.background = 'none'; videoURLContainer.style.color = '#000'; videoURLContainer.style.fontFamily = 'Times New Roman, serif'; videoURLContainer.style.fontSize = '10px'; videoURLContainer.style.zIndex = '9999'; videoURLContainer.style.cursor = 'pointer'; videoURLContainer.style.userSelect = 'none'; videoURLContainer.style.opacity = '0'; videoURLContainer.style.transition = 'opacity 0.3s ease-in-out'; // Function to extract video URLs from <video> elements function extractVideoURLs() { var videoElements = document.getElementsByTagName('video'); var videoURLs = []; for (var i = 0; i < videoElements.length; i++) { var videoElement = videoElements[i]; var videoURL = videoElement.currentSrc || videoElement.src; if (videoURL) { videoURLs.push(videoURL); } } return videoURLs; } // Update the video URLs in the container function updateVideoURLs() { var videoURLs = extractVideoURLs(); if (videoURLs.length > 0) { videoURLContainer.textContent = videoURLs.join('\n'); } else { videoURLContainer.textContent = 'No video URLs found.'; } } // Copy the video URL to the clipboard function copyURL() { var textarea = document.createElement('textarea'); textarea.value = videoURLContainer.textContent; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); // Display a confirmation message videoURLContainer.style.opacity = '1'; videoURLContainer.textContent = 'URL copied!'; setTimeout(function() { videoURLContainer.style.opacity = '0'; updateVideoURLs(); }, 3000); } // Call the updateVideoURLs function initially updateVideoURLs(); // Add the video URL container to the document body document.documentElement.appendChild(videoURLContainer); // Update the video URLs whenever the video elements on the page change var observer = new MutationObserver(updateVideoURLs); observer.observe(document.documentElement, { subtree: true, childList: true }); // Show the video URL container when clicked videoURLContainer.addEventListener('click', copyURL); // Hide the video URL container on scroll var isScrolling; window.addEventListener('scroll', function() { videoURLContainer.style.opacity = '0'; clearTimeout(isScrolling); isScrolling = setTimeout(function() { videoURLContainer.style.opacity = '1'; }, 300); }); // Get the most used color on the target site and change the text color accordingly var colors = {}; var elements = document.querySelectorAll('*'); Array.prototype.forEach.call(elements, function(element) { var computedStyle = getComputedStyle(element); var color = computedStyle.color; if (color in colors) { colors[color]++; } else { colors[color] = 1; } }); var mostUsedColor = Object.keys(colors).reduce(function(a, b) { return colors[a] > colors[b] ? a : b; }, ''); videoURLContainer.style.color = mostUsedColor; // Add the custom styles to the page using GM_addStyle GM_addStyle(` * { color: ${mostUsedColor} !important; } `); })();