您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds "Open in YMusic" button below YouTube videos.
// ==UserScript== // @name Open in YMusic Button for YouTube // @namespace Violentmonkey Scripts // @version 1.0 // @description Adds "Open in YMusic" button below YouTube videos. // @author FIRANVAR // @match https://www.youtube.com/watch* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; const BUTTON_ID = 'open-in-ymusic-button'; function createYMusicButton(videoId) { const button = document.createElement('a'); button.id = BUTTON_ID; button.textContent = 'Open in YMusic'; button.href = `https://music.youtube.com/watch?v=${videoId}`; button.target = '_blank'; button.style.display = 'inline-block'; button.style.marginLeft = '10px'; button.style.padding = '6px 12px'; button.style.background = '#ff0000'; button.style.color = 'white'; button.style.borderRadius = '4px'; button.style.textDecoration = 'none'; button.style.fontWeight = 'bold'; button.style.fontSize = '14px'; button.style.cursor = 'pointer'; return button; } function getVideoIdFromURL() { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('v'); } function addButton() { const videoId = getVideoIdFromURL(); if (!videoId) return; // Avoid duplicate buttons if (document.getElementById(BUTTON_ID)) return; // Find the container to insert the button const actionButtons = document.querySelector('#top-level-buttons-computed'); if (actionButtons) { const ymusicButton = createYMusicButton(videoId); actionButtons.appendChild(ymusicButton); } } // Re-run on navigation (for SPA routing in YouTube) const observer = new MutationObserver(() => { addButton(); }); observer.observe(document.body, { childList: true, subtree: true }); // Initial run window.addEventListener('load', addButton); })();