您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a pop out to PIP button video menu.
// ==UserScript== // @name Youtube PIP Button // @namespace m-youtube-com-pip-button // @version 1.01 // @description Adds a pop out to PIP button video menu. // @author Lu Mặp // @match https://m.youtube.com/* // @match https://youtube.com/* // @match https://*.youtube.com/* // @icon https://www.svgrepo.com/download/347276/picture-in-picture.svg // @grant none // ==/UserScript== (function() { function createButton() { const button = document.createElement('button'); button.id = "pipbutton"; // Đặt ID cho nút button.className = "pipbutton"; button.style.cssText = ` margin: 0 4px; padding: 0; background-color: transparent; border: none; cursor: pointer; transition: opacity 0.3s ease; `; // Tạo phần tử img cho icon SVG const svgIcon = document.createElement('img'); svgIcon.src = 'https://www.svgrepo.com/download/347276/picture-in-picture.svg'; // Đường dẫn đến file SVG svgIcon.alt = "PIP Icon"; // Thêm mô tả cho hình ảnh svgIcon.style.cssText = ` width: 24px; /* Chiều rộng của icon */ height: 24px; /* Chiều cao của icon */ filter: brightness(0) invert(1); /* Mặc định là màu trắng cho dark mode */ transition: filter 0.3s ease; /* Hiệu ứng chuyển đổi mượt mà */ `; // Kiểm tra chế độ dark mode và điều chỉnh màu sắc const isDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; if (!isDarkMode) { svgIcon.style.filter = 'none'; // Để nguyên màu gốc nếu không phải dark mode } button.appendChild(svgIcon); // Thêm icon vào nút // Sự kiện khi di chuột button.onmouseover = () => button.style.opacity = "0.6"; button.onmouseout = () => button.style.opacity = "1"; // Sự kiện khi nhấn nút button.onclick = () => { const video = document.querySelector("video"); if (video) { document.pictureInPictureElement ? document.exitPictureInPicture() : (video.disablePictureInPicture = false, video.requestPictureInPicture()); } }; return button; } function addButtonToMenu() { const menuContainer = document.querySelector('.ytp-left-controls'); // Kiểm tra xem nút đã được thêm chưa bằng ID và đang ở trang xem video if (menuContainer && !document.getElementById("pipbutton") && document.querySelector("video")) { menuContainer.appendChild(createButton()); } } // Gọi hàm một lần để thêm nút PIP vào khu vực menu addButtonToMenu(); // Theo dõi sự thay đổi URL để kiểm tra khi nào người dùng chuyển đến trang video khác const observer = new MutationObserver(() => { addButtonToMenu(); }); observer.observe(document.body, { childList: true, subtree: true }); })();