// ==UserScript==
// @name Bilibili 旧播放页
// @namespace Motoori Kashin
// @version 2.5.2
// @description 切换旧版播放页面,布局、播放器全部切换回2019年12月09日之前的样子。载入异常请尝试`Shift+F5`或`Ctrl+Shift+R`
// @author Motoori Kashin
// @match *://*.bilibili.com/*
// @exclude *://live.bilibili.com/*
// @license MIT
// @run-at document-start
// @icon https://static.hdslb.com/images/favicon.ico
// @compatible chrome
// @grant none
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
const OR_HTML = xhrHM(location.href);
const path = document.location.href.split('/');
let TITLE = document.getElementsByTagName("title");if (TITLE[0]){TITLE = TITLE[0].innerText;}
function xhrHM(url){ // 同步链接获取网页数据
const xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
if (xhr.status === 200) {return xhr.responseText;}
}
/*function xhrYM(url){ // 异步链接获取网页数据
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = () => {return xhr.responseText;}
xhr.send();
}
function adscr(src){ // 添加同步script
let script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.setAttribute("src",src);
document.body.appendChild(script);
}
function anscr(src){ // 添加异步script
let script = document.createElement("script");
script.setAttribute("src",src);
script.setAttribute("crossorigin","");
script.setAttribute("defer","defer");
document.body.appendChild(script);
}
function repEle(ele,dcm){ // 替换页面元素
let rp = document.getElementsByClassName(ele)[0];
let rpw = document.createElement(ele);
rpw.innerHTML = dcm;
rp.replaceWith(rpw);
}
function onPlay(){ // 动态添加av页播放器初始化代码
let bofqi = document.getElementById("bofqi");
let str = '';
var range = document.createRange()
range.setStart(bofqi, 0)
bofqi.appendChild(
range.createContextualFragment(str)
)
}*/
/* 以上接口存档备用 */
function setDM(){ // 选择弹幕列表
let cDM = window.setInterval(()=>{
let setDM = document.getElementsByClassName("bilibili-player-filter-btn")[1];
if (setDM){setDM.click();clearInterval(cDM);}
}, 10);
}
function mkBGM(ini,epId){ // 主动构造ss番剧页播放数据,ss页无法主动获取epId,未登录情况下默认取第一个分集的epId
let is = JSON.parse(ini).result; // 以数组形式获取原__INITIAL_STATE__数据,包含番剧原生信息,但需重构
let ep = 0; // 布尔值,判断是否登录,这里用数值0代替(是否能正常获取epId)
let ic = JSON.parse(OR_HTML.match(/INITIAL_STATE__=.+?\;\(function/)[0].replace(/INITIAL_STATE__=/,"").replace(/\;\(function/,"")); // 取新版__INITIAL_STATE__备用
let pug = JSON.parse(OR_HTML.match(/PGC_USERSTATE__=.+?<\/script>/)[0].replace(/PGC_USERSTATE__=/,"").replace(/<\/script>/,"")); // 以数组形式获取新版__PGC_USERSTATE__信息,播放记录被拆分到了这里
/* 下面开始构造__INITIAL_STATE__数据,第一行直接复制自旧版页面 */
let dat = {"ver":{},"loginInfo":{},"canReview":false,"userShortReview":{},"userLongReview":{},"userScore":0,"userCoined":false,"isPlayerTrigger":false,"special":false,"area":0,"app":false,"recomList":[],"playerRecomList":[],"paster":{},"payPack":{},"payMent":{},"activity":{},"spending":0,"sponsorTotal":{"code":0,"result":{"ep_bp":0,"users":0,"mine":{},"list":[]}},"sponsorWeek":{"code":0,"result":{"ep_bp":0,"users":0,"mine":{},"list":[]}},"sponsorTotalCount":0,"miniOn":true,"seasonFollowed":false,"epStat":{},"ssStat":{}};
if (epId){dat.epId = 1 * epId;ep = 1;}else{dat.epId = "";if(pug.hasOwnProperty("progress")){dat.epId = pug.progress.last_ep_id;ep = 1;}} // 当前ep集数
dat.ssId = is.season_id; // 番剧ssID
dat.mdId = 1 * is.link.match(/[0-9][0-9]*/)[0]; // 番剧信息页ID,这里通过link获取
dat.mediaInfo = {};dat.mediaInfo.actors = is.actors;dat.mediaInfo.alias = is.alias;dat.mediaInfo.areas = is.areas;dat.mediaInfo.cover = is.cover;dat.mediaInfo.evaluate = is.evaluate;
dat.mediaInfo.is_paster_ads = is.is_paster_ads;dat.mediaInfo.jp_title = is.jp_title;dat.mediaInfo.link = is.link;dat.mediaInfo.media_id = is.media_id;dat.mediaInfo.mode = is.mode;
dat.mediaInfo.season_id = is.season_id;dat.mediaInfo.season_status = is.season_status;dat.mediaInfo.season_title = is.season_title;dat.mediaInfo.season_type = is.season_type;
dat.mediaInfo.series_title = is.series_title;dat.mediaInfo.square_cover = is.square_cover;dat.mediaInfo.staff = is.staff;dat.mediaInfo.style = is.style;dat.mediaInfo.title = is.title;
dat.mediaInfo.total_ep = is.total_ep; // 番剧基本信息
dat.mediaRating = is.rating; // 评分及长短评
dat.epList = is.episodes;if (ep==0){dat.epId=dat.epList[0].ep_id;}for (let i = 0;i/)[0].replace(/PGC_USERSTATE__=/,"").replace(/<\/script>/,""));
let is = JSON.parse(OR_HTML.match(/INITIAL_STATE__=.+?\;\(function/)[0].replace(/INITIAL_STATE__=/,"").replace(/\;\(function/,""));
let dat = {"ver":{"mobile":false,"ios":false,"android":false,"windowsPhone":false,"iPhone":false,"ios9":false,"iPad":false,"webApp":false,"microMessenger":false,"weibo":false,"uc":false,"qq":false,"baidu":false,"mqq":false,"mBaidu":false,"iqiyi":false,"qqLive":false,"safari":true,"youku":false,"ie":false,"edge":false,"bili":false,"biliVer":0},"loginInfo":{},"canReview":false,"userShortReview":{},"userLongReview":{},"userScore":0,"userCoined":false,"isPlayerTrigger":false,"special":true,"area":0,"app":false,"mediaRating":{},"recomList":[],"playerRecomList":[],"paster":{},"payPack":{},"payMent":{},"activity":{},"spending":0,"sponsorTotal":{"code":0,"result":{"ep_bp":0,"users":0,"mine":{},"list":[]}},"sponsorWeek":{"code":0,"result":{"ep_bp":0,"users":0,"mine":{},"list":[]}},"sponsorTotalCount":0,"miniOn":true,"seasonFollowed":false};
if (epId){dat.epId = 1 * epId;ep = 1;}else{dat.epId = "";if(pug.hasOwnProperty("progress")){dat.epId = pug.progress.last_ep_id;ep = 1;}}
dat.ssId = ini.season_id;dat.mdId = 1 * ini.link.match(/[0-9][0-9]*/)[0];
dat.mediaInfo = {};dat.mediaInfo.actors = ini.actors;dat.mediaInfo.alias = ini.alias;dat.mediaInfo.areas = ini.areas;dat.mediaInfo.bkg_cover = ini.bkg_cover;
dat.mediaInfo.cover = ini.cover;dat.mediaInfo.evaluate = ini.evaluate;dat.mediaInfo.is_paster_ads = ini.is_paster_ads;dat.jp_title = ini.jp_title;
dat.mediaInfo.link = ini.link;dat.mediaInfo.media_id = ini.media_id;dat.mediaInfo.mode = ini.mode;dat.mediaInfo.season_id = ini.season_id;dat.mediaInfo.season_status = ini.season_status;
dat.mediaInfo.season_title = ini.season_title;dat.mediaInfo.season_type = ini.season_type;dat.mediaInfo.square_cover = ini.square_cover;dat.mediaInfo.staff = ini.staff;
dat.mediaInfo.stat = ini.state;dat.mediaInfo.style = ini.style;dat.mediaInfo.title = ini.title;
dat.mediaRating = ini.rating;
dat.epList = ini.episodes;if (ep==0){dat.epId=dat.epList[0].ep_id;}for (let i = 0;i