修复iwara播放器加载源错误问题
// ==UserScript== // @name 替换 iwara 播放器 // @namespace https://github.com/s0urcelab/userscripts // @version 1.1 // @description 修复iwara播放器加载源错误问题 // @match https://www.iwara.tv/video/* // @require https://fastly.jsdelivr.net/npm/[email protected]/browser/index.min.js // @icon https://www.iwara.tv/logo.png // @author s0urce // @license MIT // ==/UserScript== ; (function () { 'use strict'; // const css=` // .videoPlayer { // display: none !important; // } // ` // GM_addStyle(css) // Save the original fetch function const originalFetch = window.fetch; // Create a new fetch function that wraps the original one function newFetch(...args) { const [url] = args return originalFetch(...args).then(response => { if (url.includes('files.iwara.tv/file')) { response.clone().json().then(json => { const { src: { view: videoSrc } } = json.find(v => v.name === 'Source') console.warn(`当前播放资源url:${videoSrc}`) window.videoSrc = videoSrc }) } return response; }); } // Replace the original fetch function with our new one window.fetch = newFetch; const targetNode = document.getElementById('app'); const observerOptions = { childList: true, subtree: true, }; function callback(mutationList, observer) { mutationList.forEach((mutation) => { switch (mutation.type) { case 'childList': for (let node of mutation.addedNodes) { if (node.className === 'videoPlayer') { node.style.display = 'none' document.querySelector(".page-video__player").style.maxHeight = 'none' // append container for xgplayer const playCon = document.createElement("div") playCon.id = 'xgplayer' node.parentNode.appendChild(playCon) window.xg = new window.Player({ id: 'xgplayer', url: window.videoSrc, volume: 1, fluid: true, videoInit: true, }) observer.disconnect() } } break; } }); } const observer = new MutationObserver(callback); observer.observe(targetNode, observerOptions); // function checkAndReplace() { // const originContainer = document.querySelector(".videoPlayer"); // if (originContainer) { // originContainer.style.display = 'none' // document.querySelector(".page-video__player").style.maxHeight = 'none' // // append container for xgplayer // const playCon = document.createElement("div") // playCon.id = 'xgplayer' // originContainer.parentNode.appendChild(playCon) // window.xg = new window.Player({ // id: 'xgplayer', // url: window.videoSrc, // volume: 1, // fluid: true, // videoInit: true, // }) // } else { // // If the element doesn't exist yet, try again in 500ms // setTimeout(checkAndReplace, 500); // } // } // Start checking for the element // checkAndReplace(); })();