您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a button under YouTube videos to open the embed page for the current video.
// ==UserScript== // @name YouTube Embed Button Under Video // @namespace https://greasyfork.org/en/scripts/537364-youtube-embed-button-under-video // @homepageURL https://github.com/almahmudbd // @version 2.2 // @description Adds a button under YouTube videos to open the embed page for the current video. // @license GPL-3 // @author unknown // @match https://www.youtube.com/watch* // @grant none // ==/UserScript== (function () { 'use strict'; // Helper to get video ID from current URL function getVideoId() { const urlObj = new URL(window.location.href); return urlObj.searchParams.get('v'); } // Create and insert the embed button under the video function insertEmbedButton() { // Avoid duplicate buttons if (document.getElementById('yt-embed-link-btn')) return; const videoId = getVideoId(); if (!videoId) return; // Find the container below the video (where buttons like Share/Like appear) // This selector is relatively stable, but may need updating if YouTube changes its layout const actionsRow = document.querySelector('#top-level-buttons-computed, ytd-menu-renderer #top-level-buttons'); if (actionsRow) { // Create the button const btn = document.createElement('button'); btn.id = 'yt-embed-link-btn'; btn.textContent = '▶ Open Embed Page'; btn.style.marginLeft = "8px"; btn.style.padding = "6px 12px"; btn.style.background = "#222"; btn.style.color = "#fff"; btn.style.border = "none"; btn.style.borderRadius = "3px"; btn.style.cursor = "pointer"; btn.title = "Open this video in YouTube embed view"; btn.onclick = () => { const embedUrl = `https://www.youtube.com/embed/${videoId}`; window.open(embedUrl, '_blank'); }; // Insert the button at the end of the action row actionsRow.appendChild(btn); } } // Observe for SPA navigation and DOM updates let lastUrl = location.href; const observer = new MutationObserver(() => { if (location.href !== lastUrl) { lastUrl = location.href; // Remove button if navigating away (prevents stale button) const oldBtn = document.getElementById('yt-embed-link-btn'); if (oldBtn) oldBtn.remove(); setTimeout(insertEmbedButton, 700); // Wait a bit for the new page to render } // Try to insert the button if not present (handles dynamic loading) if (!document.getElementById('yt-embed-link-btn')) { setTimeout(insertEmbedButton, 700); } }); observer.observe(document.body, { childList: true, subtree: true }); // Initial insert setTimeout(insertEmbedButton, 1000); })();