Greasy Fork is available in English.
change bilibili video Set CDN URL
当前为
// ==UserScript==
// @name bilibili Video CDN
// @version 0.0.3
// @description change bilibili video Set CDN URL
// @author bevis
// @match https://www.bilibili.com/*
// @license MIT
// @namespace http://greasyfork.icu/users/429936
// ==/UserScript==
const bilivideoRegex = /^https:\/\/[a-z.-\d]*(bilivideo.com)/i;
const goodBilibiliCDNS = [
// 'upos-sz-mirrorks3.bilivideo.com',
// 'upos-sz-mirrorks3b.bilivideo.com',
// 'upos-sz-mirrorks3c.bilivideo.com',
// 'upos-sz-mirrorks32.bilivideo.com',
// 'upos-sz-mirrorcos.bilivideo.com',
// 'upos-sz-mirrorcosb.bilivideo.com',
// 'upos-sz-mirrorbos.bilivideo.com',
// 'upos-sz-mirrorhw.bilivideo.com',
// 'upos-sz-mirrorhwb.bilivideo.com',
// 'upos-sz-upcdnbda2.bilivideo.com',
// 'upos-sz-upcdnws.bilivideo.com',
// 'upos-sz-upcdnhw.bilivideo.com',
// 'upos-tf-all-js.bilivideo.com',
// 'cn-hk-eq-bcache-01.bilivideo.com',
// 'upos-hz-mirrorakam.akamaized.net',
'upos-sz-mirroraliov.bilivideo.com',
];
const httpRequestOriginOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, ...args) {
const isBiliBiliVideo = bilivideoRegex.test(url);
if (!isBiliBiliVideo) {
return httpRequestOriginOpen.apply(this, [method, url, ...args]);
}
const videoUrl = new URL(url);
const isGoodUrl = goodBilibiliCDNS.includes(videoUrl.host);
if (isGoodUrl) {
return httpRequestOriginOpen.apply(this, [method, url, ...args]);
} else {
const goodUrl = goodBilibiliCDNS[Math.floor(Math.random() * goodBilibiliCDNS.length)];
videoUrl.host = goodUrl;
return httpRequestOriginOpen.apply(this, [method, videoUrl.href, ...args]);
}
};