B站弹幕关闭

自动关闭哔哩哔哩 HTML5 播放器弹幕.

当前为 2022-01-11 提交的版本,查看 最新版本

// ==UserScript==
// @name:en-US          bilibili-Danmaku-Gate
// @name                B站弹幕关闭
// @description:en-US   Auto disable bilibili HTML5 player danmaku.
// @description         自动关闭哔哩哔哩 HTML5 播放器弹幕.
// @namespace           https://greasyfork.org/users/135090
// @version             2021.12.16
// @author              Akatsuki Rui
// @license             MIT License
// @grant               GM_info
// @run-at              document-idle
// @description         fork from 374051,https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @match               https://www.bilibili.com/*video/*
// @match               https://www.bilibili.com/*/play/*
// @match               https://www.bilibili.com/blackboard/*
// @match               https://www.bilibili.com/html/player.html*
// @match               https://player.bilibili.com/*
// ==/UserScript==

"use strict";

const SELECTOR_NATIVE = {
  on: "input:checked[class='bui-switch-input']",
  off: "input:not(:checked)[class='bui-switch-input']",
};
 
const SELECTOR_EMBED = {
  on: "div[class~='bilibili-player-video-btn-danmaku'][data-text='打开弹幕']",
  off: "div[class~='bilibili-player-video-btn-danmaku'][data-text='关闭弹幕']",
};
 
const IS_EMBED = document.location.hostname === "player.bilibili.com";
const SELECTOR = IS_EMBED ? SELECTOR_EMBED : SELECTOR_NATIVE;
 
// Disable danmaku
function disableDanmaku() {
  const button = document.querySelector(SELECTOR.on);
 
  if (button) {
    button.click();
  }
 
  if (!document.querySelector(SELECTOR.off)) {
    setTimeout(disableDanmaku, 500);
  }
}
 
// Disable danmaku with PJAX detector
function disableDanmakuPJAX() {
  const obServer = new MutationObserver(disableDanmaku);
  const obTarget = document.getElementById("bilibili-player");
  const obOption = { childList: true };
 
  disableDanmaku();
  obServer.observe(obTarget, obOption);
}
 
// Redirect `bilibili.com/s/video/*` to `bilibili.com/video/*`
if (location.href.includes("/s/video/")) {
  location.replace(location.href.replace("/s/video/", "/video/"));
}
 
// Run disabler
IS_EMBED ? disableDanmaku() : disableDanmakuPJAX();