您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
强制 U-NEXT 使用最高分辨率进行播放
// ==UserScript== // @name U-NEXT Max Resolution // @name:zh-CN U-NEXT 强制最高画质 // @name:ja U-NEXT 最高画質固定 // @namespace http://tampermonkey.net/ // @match https://*.unext.jp/* // @grant none // @version 1.0 // @author DiruSec // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=unext.jp // @description Force streaming video at maximum resolution on U-NEXT. // @description:zh-CN 强制 U-NEXT 使用最高分辨率进行播放 // @description:ja U-NEXTの再生画質を最高画質に固定させる // ==/UserScript== (function() { 'use strict'; // Function to remove all <Representation> elements except the one with the largest bandwidth function filterRepresentations(xmlString) { const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlString, "application/xml"); const adaptationSets = xmlDoc.getElementsByTagNameNS("*", "AdaptationSet"); for (let i = 0; i < adaptationSets.length; i++) { const adaptationSet = adaptationSets[i]; const representations = adaptationSet.getElementsByTagNameNS("*", "Representation"); let maxBandwidth = -1; let maxRepresentation = null; for (let j = 0; j < representations.length; j++) { const representation = representations[j]; const bandwidth = parseInt(representation.getAttribute("bandwidth"), 10); if (bandwidth > maxBandwidth) { maxBandwidth = bandwidth; maxRepresentation = representation; } } // Remove all <Representation> elements except the one with the largest bandwidth for (let j = representations.length - 1; j >= 0; j--) { const representation = representations[j]; if (representation !== maxRepresentation) { adaptationSet.removeChild(representation); } } } // Serialize the DOM object back to a string const serializer = new XMLSerializer(); return serializer.serializeToString(xmlDoc); } // Save the original fetch function const originalFetch = window.fetch; // Override the fetch function window.fetch = async function(...args) { const url = args[0]; // Check if the URL matches the pattern const regex = /https:\/\/playlist\.unext\.jp\/playlist\/v00001\/dash\/get\/.*?\.mpd.*/; if (regex.test(url)) { // Perform the fetch request const response = await originalFetch(...args); // Clone the response so that we can modify it const responseClone = await response.clone().text(); // Modify the XML response const modifiedXml = filterRepresentations(responseClone); // Return a new Response object with the modified XML return new Response(modifiedXml, { status: response.status, statusText: response.statusText, headers: response.headers }); } // If the URL doesn't match, return the original fetch call return originalFetch(...args); }; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址