您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自定义cdn,国内/国外可以换成合适的cdn
当前为
// ==UserScript== // @name Custom CDN URL // @namespace https://greasyfork.org/en/users/1160175-frerenzoo // @version 1.5.1 // @description 自定义cdn,国内/国外可以换成合适的cdn // @author freenzoo // @match https://*.bilibili.com/* // @run-at document-body // @grant unsafeWindow // @grant GM_addStyle // @license MIT // ==/UserScript== if ( location.href.startsWith('https://www.bilibili.com/video/') || location.href.startsWith('https://www.bilibili.com/bangumi/play/') ) { const cdnDomains = [ "upos-sz-mirrorhw.bilivideo.com", "upos-sz-mirrorcos.bilivideo.com", "upos-sz-mirrorali.bilivideo.com", "upos-sz-mirroralib.bilivideo.com" ]; function getRandomCdnDomain() { const randomIndex = Math.floor(Math.random() * cdnDomains.length); return cdnDomains[randomIndex]; } function replaceP2PUrl(url) { try { const urlObj = new URL(url); const hostName = urlObj.hostname; if (urlObj.hostname.endsWith(".bilivideo.com") || urlObj.hostname.endsWith(".akamaized.net") || urlObj.hostname.endsWith(".szbdyd.com")) { urlObj.host = getRandomCdnDomain(); urlObj.port = 443; // console.warn(`更换视频源: ${hostName} -> ${urlObj.host}`); return urlObj.toString(); } } catch(e) { return url; } } function replaceP2PUrlDeep(obj) { for (const key in obj) { if ( key === 'baseUrl' ) { obj[key] = replaceP2PUrl(obj[key]); } else if (typeof obj[key] === 'array' || typeof obj[key] === 'object') { replaceP2PUrlDeep(obj[key]); } } } replaceP2PUrlDeep(unsafeWindow.__playinfo__); (function (open) { unsafeWindow.XMLHttpRequest.prototype.open = function () { try { arguments[1] = replaceP2PUrl(arguments[1]); } finally { return open.apply(this, arguments); } } })(unsafeWindow.XMLHttpRequest.prototype.open); }