您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A simple script to add a Picture in Picture button to multiple Sites.
// ==UserScript== // @name Super PiP // @namespace https://flawcra.cc/ // @match *://*/* // @grant none // @version 1.1.1-GitHub // @author FlawCra // @license Apache License 2.0 // @icon data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZT0iI0Y5RjlGOSI+CiAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNC41IDQuNWwxNSAxNW0wIDBWOC4yNW0wIDExLjI1SDguMjUiIC8+Cjwvc3ZnPg== // @description A simple script to add a Picture in Picture button to multiple Sites. // ==/UserScript== const SVG = `<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="#F9F9F9"> <path stroke-linecap="round" stroke-linejoin="round" d="M4.5 4.5l15 15m0 0V8.25m0 11.25H8.25" /> </svg>`; const SVG64 = `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZT0iI0Y5RjlGOSI+CiAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNNC41IDQuNWwxNSAxNW0wIDBWOC4yNW0wIDExLjI1SDguMjUiIC8+Cjwvc3ZnPg==`; const netflix = () => { if (document.querySelector("#popout-btn")) return; let data = {}; data.masterDiv = document.querySelector(`[data-uia="controls-standard"] > div > div:nth-child(3) > div > div:nth-child(3)`) if (!data.masterDiv) return; data.exampleSpacer = data.masterDiv.querySelector(`[class^="default-ltr-"]`); data.spacerClass = data.exampleSpacer.getAttribute("class"); data.spacerStyle = data.exampleSpacer.getAttribute("style"); data.exampleIcon = data.masterDiv.querySelector(`.medium`); data.iconClass = data.exampleIcon.getAttribute("class"); data.exampleButton = data.exampleIcon.querySelector("button"); data.buttonClass = data.exampleButton.getAttribute("class"); data.exampleButtonDiv = data.exampleButton.querySelector("div"); data.buttonDivClass = data.exampleButtonDiv.getAttribute("class"); data.buttonDivRole = data.exampleButtonDiv.getAttribute("role"); data.buttonDiv = document.createElement("div"); data.buttonDiv.setAttribute("class", data.buttonDivClass); data.buttonDiv.setAttribute("role", data.buttonDivRole); data.buttonDiv.innerHTML = SVG; data.button = document.createElement("button"); data.button.setAttribute("class", data.buttonClass); data.button.setAttribute("id", "popout-btn"); data.button.addEventListener("click", () => { const videoElement = document.querySelector(`[data-uia="video-canvas"]`).querySelector("video"); if (document.pictureInPictureElement) { document.exitPictureInPicture(); } else { videoElement.requestPictureInPicture(); } }); data.button.addEventListener("mouseenter", () => { data.button.classList.add("active"); }); data.button.addEventListener("mouseleave", () => { data.button.classList.remove("active"); }); data.button.appendChild(data.buttonDiv); data.icon = document.createElement("div"); data.icon.setAttribute("class", data.iconClass); data.icon.appendChild(data.button); data.spacer = document.createElement("div"); data.spacer.setAttribute("class", data.spacerClass); data.spacer.setAttribute("style", data.spacerStyle); data.masterDiv.appendChild(data.spacer); data.masterDiv.appendChild(data.icon); }; matchDomain(`https:\/\/(.*)\.?netflix\.com(.*)`, () => loop(netflix)); const youtube = () => { const elem = document.querySelector(".ytp-pip-button"); if (!elem) return; if (elem.style.display == "") return; elem.style.display = ""; elem.innerHTML = SVG; }; matchDomain(`https:\/\/(.*)\.?youtube\.com(.*)`, () => loop(youtube)); const disneyPlus = () => { let data = {}; data.masterDiv = document.querySelector(".controls__right"); if (!data.masterDiv) return; if(document.pictureInPictureElement && document.pictureInPictureElement != document.querySelector(`[id^="hudson-"].video_view--theater`).querySelector("video")) { const videoElement = document.querySelector(`[id^="hudson-"].video_view--theater`).querySelector("video"); if (videoElement.hasAttribute("disablepictureinpicture")) videoElement.removeAttribute("disablepictureinpicture"); videoElement.requestPictureInPicture(); return; } data.button = data.masterDiv.querySelector(`[data-tooltip="PiP"]`); if (data.button) return; data.button = document.createElement("button"); data.button.setAttribute("type", "button"); data.button.setAttribute("aria-label", "Picture in Picture"); data.button.setAttribute("class", "control-icon-btn fullscreen-icon tooltip__left"); data.button.setAttribute("role", "button"); data.button.setAttribute("data-tooltip", "PiP"); data.button.addEventListener("click", () => { const videoElement = document.querySelector(`[id^="hudson-"].video_view--theater`).querySelector("video"); if (videoElement.hasAttribute("disablepictureinpicture")) videoElement.removeAttribute("disablepictureinpicture"); if (document.pictureInPictureElement) { document.exitPictureInPicture(); } else { videoElement.requestPictureInPicture(); } }); data.buttonDiv = document.createElement("div"); data.buttonDiv.setAttribute("class", "focus-hack-div"); data.buttonDiv.setAttribute("tabindex", "-1"); data.buttonDiv.innerHTML = SVG; data.button.appendChild(data.buttonDiv); data.masterDiv.appendChild(data.button); }; matchDomain(`https:\/\/(.*)\.?disneyplus\.com(.*)`, () => loop(disneyPlus)); const amazonPrimeVideo = () => { let data = {}; data.masterDiv = document.querySelector(".atvwebplayersdk-hideabletopbuttons-container"); if (!data.masterDiv) return; data.button = data.masterDiv.querySelector(`[data-tooltip="PiP"]`); if (data.button) return; data.div = document.createElement("div"); data.div.setAttribute("class", "f1qd5172 f7mv6lt"); data.span = document.createElement("span"); data.spandiv = document.createElement("div"); data.spandiv.setAttribute("class", "fewcsle fcmecz0"); data.button = document.createElement("button"); data.button.setAttribute("class", "fqye4e3 f1ly7q5u fk9c3ap fz9ydgy f1xrlb00 f1hy0e6n fgbpje3 f1uteees f1h2a8xb f760yrh f1mic5r1 f13ipev8 atvwebplayersdk-subtitleaudiomenu-button f130s5ag f15v4vpu frcngjs f12ossvl f45h"); data.button.setAttribute("data-tooltip", "PiP"); data.button.setAttribute("aria-label", "Picture in Picture"); data.button.setAttribute("style", "padding: 0px; min-width: 0px;"); data.button.addEventListener("click", () => { const videoElement = document.querySelector(".scalingVideoContainer video"); if (videoElement.hasAttribute("disablepictureinpicture")) videoElement.removeAttribute("disablepictureinpicture"); if (document.pictureInPictureElement) { document.exitPictureInPicture(); } else { videoElement.requestPictureInPicture(); } }); data.buttondiv = document.createElement("div"); data.buttondiv.setAttribute("class", "f45h"); data.buttondivimg = document.createElement("img"); data.buttondivimg.setAttribute("class", "fuorrko"); data.buttondivimg.style.color = "#F9F9F9"; data.buttondivimg.src = SVG64; data.buttondiv.appendChild(data.buttondivimg); data.button.appendChild(data.buttondiv); data.spandivdiv = document.createElement("div"); data.spandivdiv.setAttribute("class", "f1wp6x33"); data.spandivdivdiv = document.createElement("div"); data.spandivdivdiv.setAttribute("class", "fhjv49j f1svrrcm f1tep9b4 fqlubke"); data.spandivdivdiv.innerText = "Picture in Picture"; data.spandivdiv.appendChild(data.spandivdivdiv); data.spandiv.appendChild(data.button); data.spandiv.appendChild(data.spandivdiv); data.span.appendChild(data.spandiv); data.div.appendChild(data.span); document.querySelector(".atvwebplayersdk-hideabletopbuttons-container").lastChild.remove(); data.masterDiv.appendChild(data.div); }; matchDomain(`https:\/\/www\.amazon\.[a-z]{2,3}\/-\/[a-z]{2}\/gp\/video\/detail\/[A-Za-z0-9]+`, () => loop(amazonPrimeVideo)); matchDomain(`https:\/\/www\.amazon\.[a-z]{2,3}\/-\/[a-z]{2}\/dp\/[A-Za-z0-9]+`, () => loop(amazonPrimeVideo)); function loop(func) { setInterval(() => { func(); }, 1); } function matchDomain(domains, cb) { const url = location.href; if (typeof domains === 'string') { domains = [domains]; } if (domains.some(domain => new RegExp(domain).test(url))) { cb(); } } function waitDOMElement(selector, tagName = '', callback, multiple = false) { new window.MutationObserver(function (mutations) { for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (!tagName || (node.tagName === tagName)) { if (node.matches(selector)) { callback(node); if (!multiple) { this.disconnect(); } } } } } }).observe(document, { subtree: true, childList: true }); } function removeDOMElement(...elements) { for (const element of elements) { if (element) { element.remove(); } } } function removeClassesByPrefix(el, prefix) { for (const clazz of el.classList) { if (clazz.startsWith(prefix)) { el.classList.remove(clazz); } } } function blockElement(selector, blockAlways = false) { new window.MutationObserver(function (mutations) { for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (node instanceof window.HTMLElement) { if (node.matches(selector)) { removeDOMElement(node); if (!blockAlways) { this.disconnect(); // Stop watching for element being added after one removal } } } } } }).observe(document, { subtree: true, childList: true }); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址