连续播放多段(Part)视频。
// ==UserScript== // @name 自研 - 哔哩哔哩 - 分 P 连播 // @name:en_US Self-made - BiliBili - Continuous playback of multiple-part videos // @description 连续播放多段(Part)视频。 // @description:en_US Continuous playback of multiple video parts. // @version 2.0.1 // @author CPlayerCHN // @license MulanPSL-2.0 // @namespace https://www.gitlink.org.cn/CPlayerCHN // @match https://www.bilibili.com/video/* // @icon https://static.hdslb.com/images/favicon.ico // @run-at document-end // @noframes // ==/UserScript== (function() { 'use strict'; // 定义「网页标题」「初始化侦测器」「异步加载侦测器」变量,和「快捷元素选择」函数。 let title = document.title, init = new MutationObserver(() => { // 如果播放方式模式元素存在,就执行进一步的语句。 if($(".bpx-player-ctrl-setting-handoff")) { // 结束监听。 init.disconnect(); // 等待 0.5 秒,让网页内容加载。 setTimeout(() => { // 如果有下一段视频且播放模式不是自动切集,就开启自动切集并弹出撤销弹框。 if(($(".multi-page-v1 .cur-list .list-box li.watched + li") || $(".base-video-sections-v1 .video-section-list .video-episode-card__info-playing")?.parentNode.nextElementSibling) && !$(".bpx-player-ctrl-setting-handoff-content input").checked) { // 开启自动连播。 $(".next-button .switch-button").click(); // 弹出消息栏提示是否需要取消自动连播,如果 10 不撤销就移除消息栏。 if(!$("#CPL-snackbar")) { // 把消息栏写入网页。 document.body.insertAdjacentHTML("beforeend", "<style id=\"CPL-snackbar-style\">#CPL-snackbar { position: fixed; z-index: 100001; right: 24px; bottom: -48px; height: 48px; padding: 0 12px 0 24px; border-radius: 2px; background-color: #323232; display: flex; align-items: center; font-size: 14px; user-select: none; transition: bottom 0.3s cubic-bezier(0, 0, 0.2, 1) 0s; } #CPL-snackbar.display { bottom: 84px; } #CPL-snackbar span { color: #FFFFFF; } #CPL-snackbar button { border: none; background: transparent; height: 36px; padding: 0 16px; border-radius: 2px; color: var(--brand_blue); transition: background-color 0.3s cubic-bezier(0, 0, 0.2, 1) 0s; } #CPL-snackbar button:hover { background-color: rgba(255, 255, 255, 0.1); } #CPL-snackbar button:active { background-color: rgba(255, 255, 255, 0.3); }</style><nav id=\"CPL-snackbar\"><span>检测到分 P 视频,已为您开启自动连播。</span><button onclick='document.querySelector(\".next-button .switch-button\")?.click(); document.querySelector(\"#CPL-snackbar\").classList.remove(\"display\"); setTimeout(() => { document.querySelector(\"#CPL-snackbar\").remove(); }, 300);'>撤销</button></nav>"); // 定义「消息栏」变量。 const snackbar = $("#CPL-snackbar"); // 展示消息栏。 setTimeout(() => { snackbar.classList.add("display"); }, 300); // 10 秒后移除消息栏。 setTimeout(() => { snackbar.classList.remove("display"); setTimeout(() => { snackbar.remove(); $("#CPL-snackbar-style").remove(); }, 300); }, 9700); } // 不然如果没有下一段视频且播放模式是自动切集,就关闭自动切集。 }else if(!($(".multi-page-v1 .cur-list .list-box li.watched + li") || $(".base-video-sections-v1 .video-section-list .video-episode-card__info-playing")?.parentNode.nextElementSibling) && $(".bpx-player-ctrl-setting-handoff-content input").checked) { // 开启关闭自动切集。 $(".next-button .switch-button").click(); } }, 500); } }), asyncLoad = new MutationObserver(() => { // 如果网页标题和之前不一样就。 if(title !== document.title) { // 更新「网页标题」变量 title = document.title; // 如果有下一段视频且播放模式不是自动切集,就开启自动切集并弹出撤销弹框。 if(($(".multi-page-v1 .cur-list .list-box li.watched + li") || $(".base-video-sections-v1 .video-section-list .video-episode-card__info-playing")?.parentNode.nextElementSibling) && !$(".bpx-player-ctrl-setting-handoff-content input").checked) { // 开启自动连播。 $(".next-button .switch-button").click(); // 弹出消息栏提示是否需要取消自动连播,如果 10 不撤销就移除消息栏。 if(!$("#CPL-snackbar")) { // 把消息栏写入网页。 document.body.insertAdjacentHTML("beforeend", "<style id=\"CPL-snackbar-style\">#CPL-snackbar { position: fixed; z-index: 100001; right: 24px; bottom: -48px; height: 48px; padding: 0 12px 0 24px; border-radius: 2px; background-color: #323232; display: flex; align-items: center; font-size: 14px; user-select: none; transition: bottom 0.3s cubic-bezier(0, 0, 0.2, 1) 0s; } #CPL-snackbar.display { bottom: 84px; } #CPL-snackbar span { color: #FFFFFF; } #CPL-snackbar button { border: none; background: transparent; height: 36px; padding: 0 16px; border-radius: 2px; color: var(--brand_blue); transition: background-color 0.3s cubic-bezier(0, 0, 0.2, 1) 0s; } #CPL-snackbar button:hover { background-color: rgba(255, 255, 255, 0.1); } #CPL-snackbar button:active { background-color: rgba(255, 255, 255, 0.3); }</style><nav id=\"CPL-snackbar\"><span>检测到分 P 视频,已为您开启自动连播。</span><button onclick='document.querySelector(\".next-button .switch-button\")?.click(); document.querySelector(\"#CPL-snackbar\").classList.remove(\"display\"); setTimeout(() => { document.querySelector(\"#CPL-snackbar\").remove(); }, 300);'>撤销</button></nav>"); // 定义「消息栏」变量。 const snackbar = $("#CPL-snackbar"); // 展示消息栏。 snackbar.classList.add("display"); // 10 秒后移除消息栏。 setTimeout(() => { snackbar.classList.remove("display"); setTimeout(() => { snackbar.remove(); $("#CPL-snackbar-style").remove(); }, 300); }, 9700); } // 不然如果没有下一段视频且播放模式是自动切集,就关闭自动切集。 }else if(!($(".multi-page-v1 .cur-list .list-box li.watched + li") || $(".base-video-sections-v1 .video-section-list .video-episode-card__info-playing")?.parentNode.nextElementSibling) && $(".bpx-player-ctrl-setting-handoff-content input").checked) { // 开启关闭自动切集。 $(".next-button .switch-button").click(); } } }); function $(elm) { return document.querySelector(elm); } // 配置「初始化侦测器」「异步加载侦测器」。 init.observe(document.body, { childList: true, subtree: true }); asyncLoad.observe(document.querySelector("head"), { childList: true, subtree: true }); })();