您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
小可...嘿嘿🤤🤤...阿梓...嘿嘿🤤🤤...笙歌...嘿嘿🤤🤤...
// ==UserScript== // @name B站分P视频随机播放 // @namespace https://qinlili.bid // @version 0.2.0 // @description 小可...嘿嘿🤤🤤...阿梓...嘿嘿🤤🤤...笙歌...嘿嘿🤤🤤... // @author 琴梨梨 // @match https://www.bilibili.com/video/* // @icon https://www.bilibili.com/favicon.ico // @homepage https://github.com/qinlili23333/BiliRandomPlay // @supportURL https://github.com/qinlili23333/BiliRandomPlay // @license GPLv3 // @run-at document-idle // @grant GM_registerMenuCommand // ==/UserScript== (function() { 'use strict'; GM_registerMenuCommand("已经随机"+ localStorage.randomSwitch+"次", () => { if(confirm("真的要清除统计么?")){ localStorage.randomSwitch=0; alert("清除成功!刷新页面后生效!") } }); if(document.getElementById("multi_page")){ const utils={ parseInfo:text=>{ return { now:text.substr(1,text.indexOf("/")-1), total:text.substr(text.indexOf("/")+1,text.length-text.indexOf("/")-2) } }, random:(min, max)=> { return Math.round(Math.random() * (max - min)) + min; } } //检测到分P视频 console.log("Multi Video Detected! Initializing Kero Engine... -Qinlili"); let current=utils.parseInfo(document.getElementsByClassName("cur-page")[0].innerText); console.log(current) let next=0; let noClick=true; //接管pushState来替换分P history.pushState.bind(history) const originPush=history.pushState window.history.pushState=(a,b,c)=>{ if(c.startsWith("/video")){ c=location.origin+c } const nextUrl=new URL(c) if((nextUrl.pathname==location.pathname)&&switchOn&&noClick){ const nextParams=new URLSearchParams(nextUrl.search); nextParams.set('p', next); nextParams.set('random', 'on'); if(localStorage.randomSwitch){ localStorage.randomSwitch++; }else{ localStorage.randomSwitch=1; } location.href=nextUrl.pathname+"?"+nextParams.toString(); }else{ originPush.call(history,a,b,c) searchParams = new URLSearchParams(document.location.search); } } //初始化随机播放切换 let switchOn=false; let searchParams = new URLSearchParams(document.location.search); if(searchParams.get("random")=="on"){ switchOn=true } const randomSwitch=document.querySelector("#multi_page > div.head-con > div.head-left > h3"); //加载分P列表后文本会重置,所以监听分P列表加载 (function(open) { XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { if(url.indexOf("player/pagelist")>0){ this.addEventListener('load', event=>{ refreshText(); document.querySelector("#multi_page > div.cur-list").addEventListener("click",()=>{ //主动点击时避免切歌 console.log("Prevent unwanted random. -Qinlili") noClick=false; setTimeout(()=>{noClick=true;},500) },true); }); } open.call(this, method, url, async, user, pass); }; })(XMLHttpRequest.prototype.open); //刷新文本 const refreshText=()=>{ if(switchOn){ next=utils.random(1,current.total) randomSwitch.textContent="随机下一个:"+next searchParams.set('random', 'on'); originPush.call(history,{},'',location.pathname+"?"+searchParams.toString()) }else{ randomSwitch.textContent="连续播放" searchParams.set('random', 'off'); originPush.call(history,{},'',location.pathname+"?"+searchParams.toString()) } } randomSwitch.addEventListener("click",event=>{ event.stopPropagation(); event.preventDefault(); //处理切换模式 switchOn=switchOn?false:true; refreshText(); },true) } })();