您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a watch button on IMDb pages to stream via Vidsrc with overlay and season/episode controls.
当前为
// ==UserScript== // @name Ultimate IMDB Stream // @namespace https://legendzer0.io/ // @version 1.0 // @description Adds a watch button on IMDb pages to stream via Vidsrc with overlay and season/episode controls. // @author LegendZer0 // @match https://www.imdb.com/title/* // @grant none // @icon https://www.iconpacks.net/icons/1/free-icon-movie-850.png // @license MIT // ==/UserScript== (function() { 'use strict'; function getIMDbId() { const match = window.location.pathname.match(/title\/(tt\d+)/); return match ? match[1] : null; } function extractSeasonEpisode() { const seasonEpisodeDiv = document.querySelector('[data-testid="hero-subnav-bar-season-episode-numbers-section"]'); if (seasonEpisodeDiv) { const seasonEpisodeText = seasonEpisodeDiv.textContent.trim(); const match = seasonEpisodeText.match(/S(\d+).E(\d+)/); if (match) return { season: match[1], episode: match[2] }; } return null; } function extractSeriesId() { const seriesLink = document.querySelector('[data-testid="hero-title-block__series-link"]'); if (seriesLink) { const href = seriesLink.getAttribute('href'); const match = href.match(/\/title\/(tt\d+)\//); if (match) return match[1]; } return null; } function isTVSeries() { return [...document.querySelectorAll("li.ipc-inline-list__item")] .some(el => el.textContent.trim() === "TV Series") || document.body.innerText.includes("TV Series"); } function createWatchButton(imdbId) { const watchButton = document.createElement("button"); watchButton.textContent = "▶ Watch"; watchButton.style.position = "fixed"; watchButton.style.bottom = "20px"; watchButton.style.right = "20px"; watchButton.style.padding = "10px 15px"; watchButton.style.backgroundColor = "#e50914"; watchButton.style.color = "#fff"; watchButton.style.border = "none"; watchButton.style.cursor = "pointer"; watchButton.style.zIndex = "9999"; watchButton.style.fontSize = "16px"; watchButton.style.borderRadius = "5px"; watchButton.style.filter = "drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1))"; watchButton.addEventListener("click", () => showOverlay(imdbId)); document.body.appendChild(watchButton); } function createControlButton(text, onClick) { const button = document.createElement('button'); button.textContent = text; button.style.padding = '8px 12px'; button.style.margin = '5px'; button.style.backgroundColor = '#e50914'; button.style.color = 'white'; button.style.border = 'none'; button.style.borderRadius = '4px'; button.style.cursor = 'pointer'; button.addEventListener('click', onClick); return button; } function showOverlay(imdbId) { const overlay = document.createElement("div"); overlay.style.position = "fixed"; overlay.style.top = "0"; overlay.style.left = "0"; overlay.style.width = "100%"; overlay.style.height = "100%"; overlay.style.backgroundColor = "rgba(0, 0, 0, 1)"; overlay.style.zIndex = "10000"; overlay.style.display = "flex"; overlay.style.justifyContent = "center"; overlay.style.alignItems = "center"; const container = document.createElement("div"); container.style.position = "relative"; container.style.width = "80%"; container.style.height = "80%"; const iframe = document.createElement("iframe"); iframe.style.width = "100%"; iframe.style.height = "100%"; iframe.style.border = "none"; // Determine content type const seasonEpisode = extractSeasonEpisode(); const seriesId = extractSeriesId(); let isSeries = false; let currentSeason = 1; let currentEpisode = 1; let imdbIdForTV = imdbId; if (seasonEpisode && seriesId) { // Episode page isSeries = true; imdbIdForTV = seriesId; currentSeason = parseInt(seasonEpisode.season); currentEpisode = parseInt(seasonEpisode.episode); } else if (isTVSeries()) { // Series main page isSeries = true; } const updateIframe = () => { iframe.src = isSeries ? `https://vidsrc.xyz/embed/tv?imdb=${imdbIdForTV}&season=${currentSeason}&episode=${currentEpisode}` : `https://vidsrc.xyz/embed/movie?imdb=${imdbId}`; }; // Add controls for series content if (isSeries) { const controls = document.createElement("div"); controls.style.position = "absolute"; controls.style.bottom = "-50px"; controls.style.width = "100%"; controls.style.display = "flex"; controls.style.justifyContent = "space-between"; controls.style.padding = "0 20px"; // Season controls const seasonControls = document.createElement("div"); const seasonDown = createControlButton("⪡ Season", () => { if (currentSeason > 1) currentSeason--; updateIframe(); }); const seasonUp = createControlButton("Season ⪢", () => { currentSeason++; updateIframe(); }); seasonControls.append(seasonDown, seasonUp); // Episode controls const episodeControls = document.createElement("div"); const episodeDown = createControlButton("⪡ Episode", () => { if (currentEpisode > 1) currentEpisode--; updateIframe(); }); const episodeUp = createControlButton("Episode ⪢", () => { currentEpisode++; updateIframe(); }); episodeControls.append(episodeDown, episodeUp); controls.append(seasonControls, episodeControls); container.appendChild(controls); } // Close button const closeButton = document.createElement("button"); closeButton.textContent = "✖"; closeButton.style.position = "absolute"; closeButton.style.top = "10px"; closeButton.style.right = "10px"; closeButton.style.fontSize = "24px"; closeButton.style.background = "none"; closeButton.style.color = "white"; closeButton.style.border = "none"; closeButton.style.cursor = "pointer"; closeButton.addEventListener("click", () => document.body.removeChild(overlay)); // Initial load updateIframe(); container.appendChild(iframe); overlay.appendChild(container); overlay.appendChild(closeButton); document.body.appendChild(overlay); } const imdbId = getIMDbId(); if (imdbId) createWatchButton(imdbId); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址