// ==UserScript== // @name Bilibili 自动切P // @namespace https://github.com/Tsuk1ko // @version 1.0.2 // @description 为什么要单独写个脚本呢?因为自动连播就是个傻逼…… // @author 神代綺凛 // @match https://www.bilibili.com/video/* // @icon https://www.bilibili.com/favicon.ico // @grant unsafeWindow // @run-at document-start // @downloadURL none // ==/UserScript== (() => { 'use strict'; const PLAYER_EVENT = { VIDEO_MEDIA_ENDED: 'video_media_ended', VIDEO_DESTROY: 'video_destroy', }; const win = typeof unsafeWindow === 'undefined' ? window : unsafeWindow; const get = (obj, paths) => paths.reduce((prev, path) => (typeof prev === 'undefined' ? undefined : prev[path]), obj); const initPlayer = () => { const { player } = win; if (!player) return; player.on(PLAYER_EVENT.VIDEO_MEDIA_ENDED, () => { if (get(win, ['__INITIAL_STATE__', 'p']) < get(win, ['__INITIAL_STATE__', 'videoData', 'videos'])) { setTimeout(() => player.next()); } }); player.on(PLAYER_EVENT.VIDEO_DESTROY, () => { setTimeout(initPlayer); }); }; Object.defineProperty(win, 'player', { configurable: true, set: player => { delete win.player; win.player = player; initPlayer(); }, }); })();