// ==UserScript== // @name 聚合多平台VIP视频免费破解去广告【最新0.2】 // @namespace video_vip // @version 0.2 // @description 聚合多平台VIP视频免费破解去广告,适配PC+移动,全网VIP视频解析:爱奇艺、腾讯、优酷、bilibili等视频免费解析!🔥真4K高清🔥【脚本长期维护更新,完全免费,无广告,仅限学习交流!!】 // @include *://v.qq.com/x/page/* // @include *://v.qq.com/x/cover/* // @include *://v.qq.com/tv/* // @include *://*.iqiyi.com/v_* // @include *://*.iqiyi.com/a_* // @include *://*.iqiyi.com/w_* // @include *://*.iq.com/play/* // @include *://*.youku.com/v_* // @include *://*.youku.com/video* // @include *://*.youku.com/*?vid=* // @include *://*.mgtv.com/b/* // @include *://*.tudou.com/v_* // @include *://tv.sohu.com/v/* // @include *://*.bilibili.com/video/* // @include *://*.bilibili.com/bangumi/play/* // @include *://v.pptv.com/show/* // @include *://vip.pptv.com/show/* // @include *://www.wasu.cn/Play/show/* // @include *://*.le.com/ptv/vplay/* // @include *://*.acfun.cn/v/* // @include *://*.acfun.cn/bangumi/* // @include *://*.1905.com/play/* // @include *://m.v.qq.com/x/m/* // @include *://m.v.qq.com/* // @include *://m.iqiyi.com/* // @include *://m.iqiyi.com/v_* // @include *://m.youku.com/video/* // @include *://m.youku.com/alipay_* // @include *://m.mgtv.com/b/* // @include *://m.tv.sohu.com/v/* // @include *://m.tv.sohu.com/album/* // @include *://m.pptv.com/show/* // @include *://m.bilibili.com/anime/* // @include *://m.bilibili.com/video/* // @include *://m.bilibili.com/bangumi/play/* // @require https://cdn.jsdmirror.com/npm/jquery@3.7.1/dist/jquery.min.js // @connect api.bilibili.com // @grant unsafeWindow // @grant GM_addStyle // @grant GM_openInTab // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @charset UTF-8 // @license GPL License // @tag 免费看剧 // @tag 高清视频 // ==/UserScript== const util = (function () { let mediaCleanerStarted = false; let mediaPlayBlocked = false; function findTargetElement(targetContainer) { const body = window.document; let tabContainer; let tryTime = 0; const maxTryTime = 120; return new Promise((resolve, reject) => { let interval = setInterval(() => { tabContainer = body.querySelector(targetContainer); if (tabContainer) { clearInterval(interval); resolve(tabContainer); } if ((++tryTime) === maxTryTime) { clearInterval(interval); reject(); } }, 500); }); } function urlChangeReload() { const oldHref = window.location.href; let interval = setInterval(() => { let newHref = window.location.href; if (oldHref !== newHref) { clearInterval(interval); window.location.reload(); } }, 500); } function stopMedia(media) { if (!media) { return; } try { media.pause(); } catch (e) {} try { media.autoplay = false; media.loop = false; media.muted = true; media.defaultMuted = true; media.volume = 0; media.playbackRate = 1; media.removeAttribute("autoplay"); media.removeAttribute("src"); media.srcObject = null; media.querySelectorAll("source").forEach((node) => node.remove()); if (media.currentSrc || media.srcObject || media.querySelector("source")) { media.load(); } } catch (e) {} } function mutePageMedia(root = document) { if (!root || !root.querySelectorAll) { return; } root.querySelectorAll("video, audio").forEach((media) => stopMedia(media)); } function blockNativeMediaPlayback() { if (mediaPlayBlocked || !window.HTMLMediaElement) { return; } mediaPlayBlocked = true; const rawPlay = HTMLMediaElement.prototype.play; HTMLMediaElement.prototype.play = function () { stopMedia(this); return Promise.resolve(); }; document.addEventListener("play", (event) => { if (event.target instanceof HTMLMediaElement) { stopMedia(event.target); } }, true); document.addEventListener("playing", (event) => { if (event.target instanceof HTMLMediaElement) { stopMedia(event.target); } }, true); HTMLMediaElement.prototype.play.toString = () => rawPlay.toString(); } function reomveVideo() { if (mediaCleanerStarted) { mutePageMedia(); return; } mediaCleanerStarted = true; blockNativeMediaPlayback(); mutePageMedia(); setInterval(() => { mutePageMedia(); }, 500); const target = document.documentElement || document.body; if (!target || !window.MutationObserver) { return; } const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === "attributes" && mutation.target instanceof Element) { if (mutation.target.matches("video, audio")) { stopMedia(mutation.target); } return; } mutation.addedNodes.forEach((node) => { if (!(node instanceof Element)) { return; } if (node.matches && node.matches("video, audio")) { stopMedia(node); return; } mutePageMedia(node); }); }); }); observer.observe(target, {childList: true, subtree: true, attributes: true, attributeFilter: ["src", "autoplay"]}); } function syncRequest(option) { return new Promise((resolve, reject) => { option.onload = (res) => { resolve(res); }; option.onerror = (err) => { reject(err); }; GM_xmlhttpRequest(option); }); } return { req: (option) => syncRequest(option), findTargetEle: (targetEle) => findTargetElement(targetEle), urlChangeReload: () => urlChangeReload(), reomveVideo: () => reomveVideo() } })(); const superVip = (function () { const _CONFIG_ = { isMobile: navigator.userAgent.match(/(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i), currentPlayerNode: null, vipBoxId: 'vip_jx_box' + Math.ceil(Math.random() * 100000000), iframeWrapperClass: 'vip_jx_iframe_wrapper', flag: "flag_vip", autoPlayerKey: "auto_player_key" + window.location.host, autoPlayerVal: "auto_player_value_" + window.location.host, videoParseList: [ {"name": "默认A", "type": "1,3", "url": "https://json.fongmi.cc/web?url="}, {"name": "默认B", "type": "1,3", "url": "https://super.playr.top/?url="}, {"name": "七哥解析", "type": "1,3", "url": "https://jx.202617.xyz/tv.php?url="}, {"name": "冰豆解析", "type": "1,3", "url": "https://bd.jx.cn/?url="}, {"name": "花旗解析", "type": "1,3", "url": "https://www.huaqi.live/?url="}, {"name": "CK解析", "type": "1,3", "url": "https://www.ckplayer.vip/jiexi/?url="}, {"name": "Player-JY", "type": "1,3", "url": "https://jx.playerjy.com/?url="}, {"name": "虾米解析", "type": "1,3", "url": "https://jx.xmflv.com/?url="}, {"name": "789解析", "type": "1,3", "url": "https://jiexi.789jiexi.icu:4433/?url="}, {"name": "937解析", "type": "1,3", "url": "https://bfq.937auth.vip?url="}, {"name": "HLS解析", "type": "1,3", "url": "https://jx.hls.one/?url="}, {"name": "极速解析", "type": "1,3", "url": "https://jx.2s0.cn/player/?url="}, {"name": "剖元解析", "type": "1,3", "url": "https://www.pouyun.com/?url="}, {"name": "973解析", "type": "1,3", "url": "https://jx.973973.xyz/?url="}, {"name": "playm3u8", "type": "1,3", "url": "https://www.playm3u8.cn/jiexi.php?url="}, {"name": "七七云解析", "type": "1,3", "url": "https://jx.77flv.cc/?url="}, {"name": "芒果TV1", "type": "1,3", "url": "https://video.isyour.love/player/getplayer?url="}, {"name": "M1907", "type": "1,3","url":"https://im1907.top/?jx="}, {"name": "Yparse", "type": "1,3", "url": "https://jx.yparse.com/index.php?url="}, ], playerContainers: [ { host: "v.qq.com", container: "#mod_player,#player-container,.container-player", name: "Default", displayNodes: ["#mask_layer", ".mod_vip_popup", "#mask_layer", ".panel-tip-pay"] }, { host: "m.v.qq.com", container: ".mod_player,#player", name: "Default", displayNodes: [".mod_vip_popup", "[class^=app_],[class^=app-],[class*=_app_],[class*=-app-],[class$=_app],[class$=-app]", "div[dt-eid=open_app_bottom]", "div.video_function.video_function_new", "a[open-app]", "section.mod_source", "section.mod_box.mod_sideslip_h.mod_multi_figures_h,section.mod_sideslip_privileges,section.mod_game_rec"] }, {host: "w.mgtv.com", container: "#mgtv-player-wrap", name: "Default", displayNodes: []}, {host: "www.mgtv.com", container: "#mgtv-player-wrap", name: "Default", displayNodes: []}, { host: "m.mgtv.com", container: ".video-area", name: "Default", displayNodes: ["div.adFixedContain,div.ad-banner,div.m-list-graphicxcy.fstp-mark", "div[class^=mg-app],div#comment-id.video-comment div.ft,div.bd.clearfix,div.v-follower-info", "div.ht.mgui-btn.mgui-btn-nowelt", "div.personal", "div[data-v-41c9a64e]"] }, {host: "www.bilibili.com", container: "#player_module,#bilibiliPlayer,#bilibili-player", name: "Default", displayNodes: []}, {host: "m.bilibili.com", container: ".player-wrapper,.player-container,.mplayer", name: "Default", displayNodes: []}, {host: "www.iqiyi.com", container: "#areaLeftContainer,#outlayer,.iqp-player-videolayer", name: "Default", displayNodes: ["#playerPopup", "#vipCoversBox" ,"div.iqp-player-vipmask", "div.iqp-player-paymask","div.iqp-player-loginmask", "div[class^=qy-header-login-pop]",".covers_cloudCover__ILy8R","#videoContent > div.loading_loading__vzq4j",".iqp-player-guide","#player-loading-layer",".player_outer_video"], cleanupNodes: ["#player-loading-layer",".player_outer_video"]}, { host: "m.iqiyi.com", container: ".m-video-player-wrap, .iqp-player-videolayer", name: "Default", displayNodes: ["div.m-iqyGuide-layer", "a[down-app-android-url]", "div.iqp-player-vipmask", ".loading_loading__vzq4j","[name=m-extendBar]", "[class*=ChannelHomeBanner]", "section.m-hotWords-bottom"] }, {host: "www.iq.com", container: ".intl-video-wrap", name: "Default", displayNodes: []}, {host: "v.youku.com", container: ".player-container,#ykPlayer,#playerMouseWheel", name: "Default", displayNodes: ["#iframaWrapper","#video_side_cashier",".secondary-container.video_side_cashier_wrapper","#youku-dashboard"], cleanupNodes: ["#youku-dashboard > div.kui-dashboard-dashboard-panel","#youku-dashboard > div.kui-dashboard-dashboard-background","#youku-dashboard > div.kui-dashboard-bar-container","#youku-dashboard > div.kui-dashboard-timer-container","#video_side_cashier",".secondary-container.video_side_cashier_wrapper"]}, {host: "m.youku.com", container: "#playerMouseWheel,.h5-detail-player", name: "Default", displayNodes: []}, {host: "tv.sohu.com", container: "#player", name: "Default", displayNodes: []}, {host: "film.sohu.com", container: "#playerWrap", name: "Default", displayNodes: []}, {host: "www.le.com", container: "#le_playbox", name: "Default", displayNodes: []}, {host: "video.tudou.com", container: ".td-playbox", name: "Default", displayNodes: []}, {host: "v.pptv.com", container: "#pptv_playpage_box", name: "Default", displayNodes: []}, {host: "vip.pptv.com", container: ".w-video", name: "Default", displayNodes: []}, {host: "www.wasu.cn", container: "#flashContent", name: "Default", displayNodes: []}, {host: "www.acfun.cn", container: "#player", name: "Default", displayNodes: []}, {host: "vip.1905.com", container: "#player,#vodPlayer", name: "Default", displayNodes: []}, {host: "www.1905.com", container: "#player,#vodPlayer", name: "Default", displayNodes: []}, ] }; function buildPlayerFrameLayout({isMobile, containerRect = {}, containerStyle = {}, viewportHeight = 0}) { const parsePixelValue = (value) => { const parsedValue = Number.parseFloat(value); return Number.isFinite(parsedValue) ? parsedValue : 0; }; if (!isMobile) { return { containerStyles: { overflow: "hidden" }, wrapperStyles: { position: "absolute", top: "0", left: "0", width: "100%", height: "100%", background: "#000", overflow: "hidden", zIndex: "2147483646" }, iframeStyles: { width: "100%", height: "100%", border: "none", display: "block", background: "#000" } }; } const width = parsePixelValue(containerRect.width); const height = parsePixelValue(containerRect.height); const paddingTop = parsePixelValue(containerStyle.paddingTop); const ratioHeight = width > 0 ? Math.round((width * 9) / 16) : 0; const fallbackViewportHeight = viewportHeight > 0 ? Math.round(viewportHeight * 0.32) : 180; const rawHeight = height || paddingTop || ratioHeight || fallbackViewportHeight; const maxHeight = viewportHeight > 0 ? Math.max(220, Math.round(viewportHeight * 0.7)) : rawHeight; const resolvedHeight = Math.max(180, Math.min(rawHeight, maxHeight)); const usesPaddingAspect = width > 0 && paddingTop > 0 && (paddingTop / width) > 0.25; return { containerStyles: { overflow: "hidden", height: "auto", minHeight: `${resolvedHeight}px`, ...(usesPaddingAspect ? {paddingTop: "0"} : {}) }, wrapperStyles: { position: "relative", display: "block", width: "100%", minHeight: `${resolvedHeight}px`, aspectRatio: "16 / 9", background: "#000", overflow: "hidden", zIndex: "2147483646" }, iframeStyles: { position: "absolute", inset: "0", width: "100%", height: "100%", border: "none", display: "block", background: "#000" } }; } function applyInlineStyles(element, styles) { Object.entries(styles || {}).forEach(([propertyName, propertyValue]) => { if (propertyValue === undefined || propertyValue === null || propertyValue === "") { return; } element.style[propertyName] = propertyValue; }); } // ======== 独立打赏模块(双二维码并排,尺寸加大) ======== function createDonateModule() { const modalId = 'donate_independent_' + Math.ceil(Math.random() * 100000000); const closeBtnId = modalId + '_close'; const closeBtnBottomId = modalId + '_close_btn'; const style = document.createElement('style'); style.textContent = ` #${modalId} { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 2147483648; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(6px); animation: fadeInDonate 0.3s ease; } #${modalId}.active { display: flex !important; } @keyframes fadeInDonate { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } #${modalId} .donate-box { position: relative; max-width: 480px; /* 加宽以容纳更大的二维码 */ width: 94%; padding: 28px 22px 24px; border-radius: 24px; background: rgba(10, 18, 40, 0.92); backdrop-filter: blur(20px); border: 1.5px solid rgba(255, 215, 0, 0.3); box-shadow: 0 0 80px rgba(255, 215, 0, 0.15); text-align: center; color: #e0e7ff; display: flex; flex-direction: column; align-items: center; margin: 20px; } #${modalId} .donate-box::before { content: ''; position: absolute; inset: -2px; border-radius: 26px; padding: 2px; background: conic-gradient(from 0deg, #ffd700, #ff00ff, #ffd700, #ff00ff, #ffd700); background-size: 300% 300%; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotateGlowDonate 8s linear infinite; opacity: 0.6; pointer-events: none; z-index: -1; } @keyframes rotateGlowDonate { 0% { --angle: 0deg; } 100% { --angle: 360deg; } } @property --angle { syntax: ''; initial-value: 0deg; inherits: false; } #${modalId} .donate-close { position: absolute; top: 8px; right: 14px; font-size: 20px; color: #94a3b8; cursor: pointer; transition: 0.2s; line-height: 1; } #${modalId} .donate-close:hover { color: #fff; transform: rotate(90deg); } #${modalId} .donate-title { color: #fde047; font-size: 20px; font-weight: 700; margin: 0 0 2px; letter-spacing: 1px; } #${modalId} .donate-sub { color: #fbbf24; font-size: 13px; margin: 0 0 8px; opacity: 0.9; } /* 双二维码容器 - 并排且尺寸加大 */ #${modalId} .donate-qr-wrapper { display: flex; flex-direction: row; justify-content: center; gap: 20px; width: 100%; margin: 6px 0 4px; flex-wrap: wrap; } #${modalId} .donate-qr-item { display: flex; flex-direction: column; align-items: center; flex: 0 1 auto; width: 170px; /* 固定宽度,保证二维码够大 */ max-width: 100%; } #${modalId} .donate-qr-item .qr-label { font-size: 12px; color: #94a3b8; margin-top: 6px; font-weight: 500; letter-spacing: 1px; } #${modalId} .donate-qr-item .qr-img { width: 100%; aspect-ratio: 1/1; border-radius: 12px; border: 2px solid rgba(255, 215, 0, 0.3); background: #fff; padding: 6px; box-shadow: 0 0 20px rgba(255, 215, 0, 0.15); overflow: hidden; } #${modalId} .donate-qr-item .qr-img img { width: 100%; height: 100%; object-fit: contain; display: block; border-radius: 8px; } #${modalId} .donate-text { max-width: 280px; width: 100%; margin: 8px auto 2px; padding: 0 4px; font-size: 13px; color: #cbd5e1; line-height: 1.5; text-align: center; } #${modalId} .donate-text p { margin: 2px 0; } #${modalId} .donate-text strong { color: #fde047; } #${modalId} .donate-divider { width: 60px; height: 1.5px; margin: 6px auto; background: linear-gradient(90deg, transparent, #fbbf24, transparent); border: none; } #${modalId} .donate-close-btn { margin-top: 6px; padding: 6px 28px; border-radius: 999px; border: 1px solid rgba(255,215,0,0.5); background: rgba(255,215,0,0.1); color: #fde047; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; backdrop-filter: blur(4px); } #${modalId} .donate-close-btn:hover { background: rgba(255,215,0,0.25); color: #ffffff; border-color: #fbbf24; transform: scale(1.05); box-shadow: 0 0 20px rgba(255,215,0,0.3); } /* 移动端适配:堆叠显示,尺寸适中 */ @media (max-width: 520px) { #${modalId} .donate-box { padding: 20px 16px; margin: 12px; max-width: 380px; } #${modalId} .donate-qr-wrapper { gap: 16px; flex-direction: column; align-items: center; } #${modalId} .donate-qr-item { width: 80%; max-width: 200px; } #${modalId} .donate-title { font-size: 18px; } #${modalId} .donate-sub { font-size: 12px; } #${modalId} .donate-text { font-size: 12px; max-width: 220px; } } `; document.head.appendChild(style); const modalHtml = `
`; document.body.insertAdjacentHTML('beforeend', modalHtml); const modal = document.getElementById(modalId); const closeBtn = document.getElementById(closeBtnId); const closeBtnBottom = document.getElementById(closeBtnBottomId); function openModal() { modal.classList.add('active'); } function closeModal() { modal.classList.remove('active'); } closeBtn.addEventListener('click', closeModal); closeBtnBottom.addEventListener('click', closeModal); modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && modal.classList.contains('active')) closeModal(); }); return { open: openModal, close: closeModal }; } // ======== 主类(保持不变) ======== class BaseConsumer { constructor() { this.parse = () => { util.findTargetEle('body') .then((container) => this.preHandle(container)) .then((container) => this.generateElement(container)) .then((container) => this.bindEvent(container)) .then((container) => this.autoPlay(container)) .then((container) => this.postHandle(container)); } } preHandle(container) { [...new Set(((_CONFIG_.currentPlayerNode.displayNodes || []).concat(_CONFIG_.currentPlayerNode.cleanupNodes || [])).filter(Boolean))].forEach((selector) => { document.querySelectorAll(selector).forEach((obj) => { obj.style.setProperty("display", "none", "important"); obj.style.setProperty("opacity", "0", "important"); obj.style.setProperty("pointer-events", "none", "important"); }); }); return new Promise((resolve, reject) => resolve(container)); } generateElement(container) { // ===== 主界面样式(与之前一致) ===== GM_addStyle(` #${_CONFIG_.vipBoxId} { cursor: pointer; position: fixed; top: 120px; left: 0px; z-index: 2147483647; text-align: left; display: block !important; visibility: visible !important; opacity: 1 !important; pointer-events: auto !important; font-family: 'Segoe UI', 'Poppins', system-ui, -apple-system, sans-serif; filter: drop-shadow(0 0 12px rgba(0, 255, 255, 0.3)); } #${_CONFIG_.vipBoxId} .img_box { width: 40px; height: 40px; line-height: 40px; text-align: center; color: #fff !important; background: rgba(10, 20, 40, 0.75); backdrop-filter: blur(12px); border: 1.5px solid rgba(0, 255, 255, 0.4); box-shadow: 0 0 20px rgba(0, 255, 255, 0.15), inset 0 0 15px rgba(0, 255, 255, 0.05); margin: 5px 0px; border-radius: 14px !important; transition: all 0.25s ease; position: relative; overflow: hidden; } #${_CONFIG_.vipBoxId} .img_box::before { content: ''; position: absolute; inset: -2px; border-radius: 16px; padding: 2px; background: conic-gradient(from var(--angle, 0deg), #00ffff, #ff00ff, #00ffff, #ff00ff, #00ffff); background-size: 300% 300%; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotateGlow 4s linear infinite; opacity: 0.7; transition: opacity 0.3s; pointer-events: none; } #${_CONFIG_.vipBoxId} .img_box:hover::before { opacity: 1; } @keyframes rotateGlow { 0% { --angle: 0deg; } 100% { --angle: 360deg; } } @property --angle { syntax: ''; initial-value: 0deg; inherits: false; } #${_CONFIG_.vipBoxId} .vip_icon > .img_box { background: rgba(20, 10, 50, 0.8); border-color: #a78bfa; box-shadow: 0 0 30px rgba(167, 139, 250, 0.3); } #${_CONFIG_.vipBoxId} .vip_icon > .img_box::before { background: conic-gradient(from var(--angle), #a78bfa, #7c3aed, #a78bfa, #7c3aed, #a78bfa); } #${_CONFIG_.vipBoxId} #vip_auto { background: rgba(30, 20, 80, 0.8); border-color: #818cf8; box-shadow: 0 0 25px rgba(99, 102, 241, 0.3); } #${_CONFIG_.vipBoxId} #vip_auto::before { background: conic-gradient(from var(--angle), #818cf8, #4338ca, #818cf8, #4338ca, #818cf8); } #${_CONFIG_.vipBoxId} #vip_reload { background: rgba(50, 10, 20, 0.8); border-color: #f472b6; box-shadow: 0 0 25px rgba(244, 114, 182, 0.3); } #${_CONFIG_.vipBoxId} #vip_reload::before { background: conic-gradient(from var(--angle), #f472b6, #be123c, #f472b6, #be123c, #f472b6); } #${_CONFIG_.vipBoxId} #vip_donate_btn { background: rgba(40, 20, 10, 0.8); border-color: #fbbf24; box-shadow: 0 0 30px rgba(251, 191, 36, 0.3); animation: donateGlow 2s ease-in-out infinite alternate; } #${_CONFIG_.vipBoxId} #vip_donate_btn::before { background: conic-gradient(from var(--angle), #fbbf24, #ffd700, #fbbf24, #ffd700, #fbbf24); animation-duration: 3s; } #${_CONFIG_.vipBoxId} #vip_donate_btn:hover { transform: scale(1.10); background: rgba(60, 30, 10, 0.9); border-color: #fde047; box-shadow: 0 0 50px rgba(251, 191, 36, 0.6); } @keyframes donateGlow { 0% { box-shadow: 0 0 20px rgba(251, 191, 36, 0.2); } 100% { box-shadow: 0 0 40px rgba(251, 191, 36, 0.6); } } #${_CONFIG_.vipBoxId} .img_box:hover { transform: scale(1.10); background: rgba(0, 20, 40, 0.9); border-color: #fff; box-shadow: 0 0 40px rgba(0, 255, 255, 0.5); } #${_CONFIG_.vipBoxId} .vip_list { display: none; position: absolute; left: 50px; top: -10px; width: 420px; max-height: 480px; overflow-y: auto; padding: 20px 18px 16px 18px; border-radius: 24px; background: rgba(8, 12, 30, 0.88); backdrop-filter: blur(20px); border: 1.5px solid rgba(0, 255, 255, 0.3); box-shadow: 0 0 60px rgba(0, 255, 255, 0.15), inset 0 0 60px rgba(0, 255, 255, 0.05); text-align: left; font-size: 13px; color: #e0e7ff; box-sizing: border-box; } #${_CONFIG_.vipBoxId} .vip_list::before { content: ''; position: absolute; inset: -2px; border-radius: 26px; padding: 2px; background: conic-gradient(from var(--angle, 0deg), #00ffff, #ff00ff, #00ffff, #ff00ff, #00ffff); background-size: 300% 300%; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotateGlow 6s linear infinite; opacity: 0.5; pointer-events: none; z-index: -1; } #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar { width: 4px; } #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar-thumb { background: #0ea5e9; border-radius: 8px; box-shadow: 0 0 10px #0ea5e9; } #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar-track { background: rgba(0,0,0,0.2); } /* ===== 解析源卡片式模块 ===== */ .jx-module { margin-bottom: 18px; padding: 12px 14px 14px 14px; border-radius: 18px; background: rgba(255, 255, 255, 0.04); backdrop-filter: blur(4px); border: 1px solid rgba(255, 255, 255, 0.06); transition: all 0.2s; } .jx-module:last-child { margin-bottom: 0; } .jx-module .module-title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; padding-bottom: 8px; margin-bottom: 10px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); letter-spacing: 1px; } .jx-module.embed .module-title { color: #7dd3fc; border-bottom-color: rgba(125, 211, 252, 0.2); } .jx-module.embed .module-title .icon { color: #38bdf8; } .jx-module.popup .module-title { color: #fcd34d; border-bottom-color: rgba(251, 191, 36, 0.2); } .jx-module.popup .module-title .icon { color: #fbbf24; } .jx-module ul { padding-left: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 10px; } .jx-module ul li { list-style: none; flex: 1 0 calc(33.33% - 10px); min-width: 70px; border-radius: 12px; font-size: 13px; font-weight: 500; color: #c7d2fe; text-align: center; line-height: 36px; background: rgba(20, 40, 80, 0.5); border: 1px solid rgba(100, 150, 255, 0.15); padding: 0 6px; transition: all 0.25s ease; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; box-shadow: 0 2px 8px rgba(0,0,0,0.1); position: relative; } .jx-module ul li:hover { background: rgba(0, 200, 255, 0.2); border-color: #38bdf8; color: #ffffff; transform: translateY(-3px); box-shadow: 0 6px 20px rgba(56, 189, 248, 0.3); } .jx-module ul li.selected { background: rgba(56, 189, 248, 0.25); border-color: #7dd3fc; color: #ffffff; box-shadow: 0 0 0 2px #7dd3fc, 0 4px 16px rgba(125, 211, 252, 0.3); } .jx-module ul li.selected::after { content: ' ✓'; color: #7dd3fc; font-weight: 700; } .jx-module.popup ul li.selected { border-color: #fcd34d; box-shadow: 0 0 0 2px #fcd34d, 0 4px 16px rgba(251, 191, 36, 0.3); } .jx-module.popup ul li.selected::after { color: #fcd34d; } #${_CONFIG_.vipBoxId} .vip_list .tips { margin-top: 18px; padding: 12px 16px; border-radius: 14px; background: rgba(0, 0, 0, 0.4); border-left: 4px solid #0ea5e9; font-size: 11px; color: #94a3b8; line-height: 1.8; box-shadow: inset 0 0 30px rgba(14, 165, 233, 0.05); } #${_CONFIG_.vipBoxId} .vip_list .tips b { color: #7dd3fc; text-shadow: 0 0 15px rgba(125, 211, 252, 0.3); } @media (max-width: 520px) { #${_CONFIG_.vipBoxId} .vip_list { left: 50px; top: -20px; width: calc(100vw - 90px); max-width: 340px; max-height: 70vh; padding: 16px 12px; } .jx-module ul li { flex: 1 0 calc(50% - 10px); line-height: 42px; font-size: 14px; min-width: 60px; } .jx-module { padding: 10px 10px 12px 10px; } #${_CONFIG_.vipBoxId} .img_box { width: 36px; height: 36px; line-height: 36px; font-size: 14px !important; } } @keyframes pulseGlow { 0% { opacity: 0.6; transform: scale(0.98); } 50% { opacity: 1; transform: scale(1.02); } 100% { opacity: 0.6; transform: scale(0.98); } } #${_CONFIG_.vipBoxId} .vip_icon > .img_box { animation: pulseGlow 3s ease-in-out infinite; } `); // 构建解析源列表 let type_1_str = "", type_2_str = "", type_3_str = ""; _CONFIG_.videoParseList.forEach((item, index) => { if (item.type.includes("1")) { type_1_str += `
  • ${item.name}
  • `; } if (item.type.includes("2")) { type_2_str += `
  • ${item.name}
  • `; } if (item.type.includes("3")) { type_3_str += `
  • ${item.name}
  • `; } }); let autoPlay = !!GM_getValue(_CONFIG_.autoPlayerKey, null) ? "开" : "关"; // 主界面 HTML $(container).append(`
    VIP
    内嵌播放
      ${type_1_str}
    👇必看说明👇:
      1、本脚本为开源项目,完全免费,请勿上当受骗
      2、若无法播放可能是被运营商屏蔽了,可以挂梯子试试
      3、脚本随时更新请关注!
      4、自动解析失败时,可手动切换其他解析源
      5、如某些网站有会员可以关闭自动解析功能
    ${autoPlay}
    🎁
    `); // 创建独立打赏模块(仅创建一次) if (!this.donateModule) { this.donateModule = createDonateModule(); } return new Promise((resolve, reject) => resolve(container)); } reloadCurrentPlayer() { const iframe = document.querySelector(`.${_CONFIG_.iframeWrapperClass} iframe`); if (iframe && iframe.src) { iframe.src = iframe.src; return; } const selectedItem = document.querySelector(`#${_CONFIG_.vipBoxId} .vip_list .nq-li.selected`); if (!selectedItem) { return; } const index = parseInt(selectedItem.getAttribute("data-index"), 10); const videoObj = _CONFIG_.videoParseList[index]; if (videoObj && videoObj.type.includes("1")) { this.showPlayerWindow(videoObj); } } bindEvent(container) { const vipBox = $(`#${_CONFIG_.vipBoxId}`); if (_CONFIG_.isMobile) { vipBox.find(".vip_icon").on("click", () => vipBox.find(".vip_list").toggle()); } else { const vipIcon = vipBox.find(".vip_icon"); const vipList = vipBox.find(".vip_list"); let vipListHideTimer = null; vipIcon.on("mouseenter", () => { clearTimeout(vipListHideTimer); vipList.show(); }); vipIcon.on("mouseleave", () => { vipListHideTimer = setTimeout(() => vipList.hide(), 160); }); } let _this = this; vipBox.find("#vip_reload").on("click", (event) => { event.stopPropagation(); this.reloadCurrentPlayer(); }); // 打赏按钮调用独立模块 vipBox.find("#vip_donate_btn").on("click", (e) => { e.stopPropagation(); if (_this.donateModule) { _this.donateModule.open(); } }); // 解析源点击(内嵌) vipBox.find(".vip_list .nq-li").each((liIndex, item) => { item.addEventListener("click", () => { const index = parseInt($(item).attr("data-index")); GM_setValue(_CONFIG_.autoPlayerVal, index); GM_setValue(_CONFIG_.flag, "true"); _this.showPlayerWindow(_CONFIG_.videoParseList[index]); vipBox.find(".vip_list li").removeClass("selected"); $(item).addClass("selected"); }); }); // 解析源点击(弹窗) vipBox.find(".vip_list .tc-li").each((liIndex, item) => { item.addEventListener("click", () => { const index = parseInt($(item).attr("data-index")); const videoObj = _CONFIG_.videoParseList[index]; let url = videoObj.url + window.location.href; GM_openInTab(url, {active: true, insert: true, setParent: true}); }); }); // 右键移动 vipBox.mousedown(function (e) { if (e.which !== 3) { return; } e.preventDefault() vipBox.css("cursor", "move"); const positionDiv = $(this).offset(); let distenceX = e.pageX - positionDiv.left; let distenceY = e.pageY - positionDiv.top; $(document).mousemove(function (e) { let x = e.pageX - distenceX; let y = e.pageY - distenceY; const windowWidth = $(window).width(); const windowHeight = $(window).height(); if (x < 0) { x = 0; } else if (x > windowWidth - vipBox.outerWidth(true) - 100) { x = windowWidth - vipBox.outerWidth(true) - 100; } if (y < 0) { y = 0; } else if (y > windowHeight - vipBox.outerHeight(true)) { y = windowHeight - vipBox.outerHeight(true); } vipBox.css("left", x); vipBox.css("top", y); }); $(document).mouseup(function () { $(document).off('mousemove'); vipBox.css("cursor", "pointer"); }); $(document).contextmenu(function (e) { e.preventDefault(); }) }); return new Promise((resolve, reject) => resolve(container)); } autoPlay(container) { const vipBox = $(`#${_CONFIG_.vipBoxId}`); vipBox.find("#vip_auto").on("click", function () { if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) { GM_setValue(_CONFIG_.autoPlayerKey, null); $(this).html("关"); $(this).attr("title", "是否打开自动解析。若自动解析失败,请手动选择其它接口尝试!"); } else { GM_setValue(_CONFIG_.autoPlayerKey, "true"); $(this).html("开"); } setTimeout(function () { window.location.reload(); }, 200); }); if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) { this.selectPlayer(); } return new Promise((resolve, reject) => resolve(container)); } selectPlayer() { let index = GM_getValue(_CONFIG_.autoPlayerVal, 2); let autoObj = _CONFIG_.videoParseList[index]; let _th = this; if (autoObj.type.includes("1")) { setTimeout(function () { _th.showPlayerWindow(autoObj); const vipBox = $(`#${_CONFIG_.vipBoxId}`); vipBox.find(`.vip_list [title="${autoObj.name}1"]`).addClass("selected"); vipBox.find("#vip_auto").attr("title", `自动解析源:${autoObj.name}`); }, 1500); } } showPlayerWindow(videoObj) { util.findTargetEle(_CONFIG_.currentPlayerNode.container) .then((container) => { const type = videoObj.type; let url = videoObj.url + window.location.href; if (type.includes("1")) { const cleanupSelectors = [...new Set(((_CONFIG_.currentPlayerNode.displayNodes || []).concat(_CONFIG_.currentPlayerNode.cleanupNodes || [])).filter(Boolean))]; const cleanup = () => { cleanupSelectors.forEach((selector) => { document.querySelectorAll(selector).forEach((node) => { node.style.setProperty("display", "none", "important"); node.style.setProperty("opacity", "0", "important"); node.style.setProperty("pointer-events", "none", "important"); }); }); }; cleanup(); if (_CONFIG_.cleanupTimer) { clearInterval(_CONFIG_.cleanupTimer); } _CONFIG_.cleanupTimer = setInterval(cleanup, 500); if (!_CONFIG_.fullscreenCleanupBound) { document.addEventListener("fullscreenchange", cleanup); _CONFIG_.fullscreenCleanupBound = true; } const initialRect = container.getBoundingClientRect(); const initialStyle = window.getComputedStyle(container); const frameLayout = buildPlayerFrameLayout({ isMobile: !!_CONFIG_.isMobile, containerRect: initialRect, containerStyle: { paddingTop: initialStyle.paddingTop }, viewportHeight: window.innerHeight || document.documentElement.clientHeight || 0 }); $(container).empty(); util.reomveVideo(); if (initialStyle.position === "static") { container.style.position = "relative"; } applyInlineStyles(container, frameLayout.containerStyles); const iframeWrapper = document.createElement("div"); iframeWrapper.className = _CONFIG_.iframeWrapperClass; applyInlineStyles(iframeWrapper, frameLayout.wrapperStyles); const iframe = document.createElement("iframe"); iframe.src = url; iframe.frameBorder = "0"; iframe.allow = "autoplay; encrypted-media; fullscreen"; iframe.allowFullscreen = true; iframe.referrerPolicy = "no-referrer"; applyInlineStyles(iframe, frameLayout.iframeStyles); iframeWrapper.appendChild(iframe); container.appendChild(iframeWrapper); } }); } postHandle(container) { if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) { util.urlChangeReload(); } else { let oldHref = window.location.href; let interval = setInterval(() => { let newHref = window.location.href; if (oldHref !== newHref) { oldHref = newHref; if (!!GM_getValue(_CONFIG_.flag, null)){ clearInterval(interval); window.location.reload(); } } }, 1000); } } } class DefaultConsumer extends BaseConsumer {} return { start: () => { GM_setValue(_CONFIG_.flag, null); let mallCase = 'Default'; let playerNode = _CONFIG_.playerContainers.filter(value => value.host === window.location.host); if (playerNode === null || playerNode.length <= 0) { console.warn(window.location.host + "该网站暂不支持,请联系作者,作者将会第一时间处理(注意:请记得提供有问题的网址)"); return; } _CONFIG_.currentPlayerNode = playerNode[0]; mallCase = _CONFIG_.currentPlayerNode.name; const targetConsumer = eval(`new ${mallCase}Consumer`); targetConsumer.parse(); } } })(); (function () { superVip.start(); })();