// ==UserScript== // @name Bilibili Video Fix Negative Color // @namespace https://github.com/downwarjers/WebTweaks // @version 1.3.1 // @description 解決 Bilibili 影片顏色異常或提供負片效果。在播放器的「設定」選單(關燈模式旁)新增「反轉顏色」開關。透過注入 CSS `filter: invert(100%) hue-rotate(180deg)` 實現畫面反轉。 // @author downwarjers // @license MIT // @match *://www.bilibili.com/* // @grant none // @downloadURL https://raw.githubusercontent.com/downwarjers/WebTweaks/main/UserScripts/bilibili-video-negative-color/bilibili-video-negative-color.user.js // @updateURL https://raw.githubusercontent.com/downwarjers/WebTweaks/main/UserScripts/bilibili-video-negative-color/bilibili-video-negative-color.user.js // ==/UserScript== (function () { 'use strict'; // 1. 注入 CSS 樣式 const style = document.createElement('style'); style.textContent = ` /* 影片反轉的樣式 */ .bpx-player-container.video-is-inverted video { filter: invert(100%) hue-rotate(180deg) saturate(120%); } `; document.head.appendChild(style); /** * 創建「反轉顏色」的 Checkbox 元素 * @param {Element} playerContainer - 播放器容器 * @param {Element} anchorElement - "关灯模式" 的
元素 (作為複製模板) * @returns {Element} */ function createInvertCheckbox(playerContainer, anchorElement) { // 深度複製 "关灯模式" 節點,以繼承所有樣式與結構 const newCheckbox = anchorElement.cloneNode(true); // 修改 class,移除 'bpx-player-ctrl-setting-lightoff' // 並加上我們自己的標記 'my-invert-checkbox' newCheckbox.classList.remove('bpx-player-ctrl-setting-lightoff'); newCheckbox.classList.add('my-invert-checkbox'); // 找到內部的 const input = newCheckbox.querySelector('.bui-checkbox-input'); if (input) { input.setAttribute('aria-label', '反轉顏色'); // 檢查當前狀態並設定 const isCurrentlyInverted = playerContainer.classList.contains('video-is-inverted'); input.checked = isCurrentlyInverted; // 綁定 change 事件 input.addEventListener('change', (e) => { playerContainer.classList.toggle('video-is-inverted', e.target.checked); }); } // 找到