AdaptDark_黑夜模式亮度调节器

浏览器设置为黑夜主题时, 将自适应调节亮度. 初次使用需要进入右键菜单进行个性化设置.

// ==UserScript==
// @name         AdaptDark_黑夜模式亮度调节器
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  浏览器设置为黑夜主题时, 将自适应调节亮度. 初次使用需要进入右键菜单进行个性化设置.
// @author       bode135
// @include      *
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @license      MIT
// ==/UserScript==




(function() {
    'use strict';

    // --- 创建遮罩
    var mask = document.createElement("div");
    mask.setAttribute('style', 'position:fixed;top:0;left:0;outline:5000px solid;z-index:99999;');
    document.body.appendChild(mask);

    function get_brightness_by_input(input)
    {
        if (input == "" || input == null) return null;

        var x = Number(input);

        if (isNaN(x) || x > 100 || x < 0)
        {
            return NaN;
        }

        if (x > 1)
        {
            x = x / 100;
        }

        return x;
    }

    function cover(input) {
        /* input其实是遮罩层的透明度, 用1减去后变为下层的亮度 */

        var x = get_brightness_by_input(input);

        if (x == null) return 0;

        if (isNaN(x))
        {
            alert("请输入一个[0~1]之间的小数作为屏幕亮度!");
            return 0;
        }

        // 从暗度变为亮度
        var brightness = 1 - x;

        mask.style.outlineColor = 'rgba(0,0,0,' + brightness + ')';
        return 1;
    }

    // --- 计算本网站的初始化亮度值
    var default_init_brightness = 0.75;
    var init_brightness = default_init_brightness;

    // 加载用户偏好(个性化网站亮度)
    let hostname = window.location.hostname;
    var key = "my_custom_brightness_dc";
    var my_custom_brightness_dc = GM_getValue(key);
    if (!my_custom_brightness_dc) my_custom_brightness_dc = {};

    // 判断是否设置了所有网站的默认亮度
    var null_ls = [null, undefined, ""];
    var default_brightness = GM_getValue("default_brightness");
    if (!null_ls.includes(default_brightness))
    {
        init_brightness = default_brightness;
    }
    else
    {
        default_brightness = init_brightness;
    }

    if(my_custom_brightness_dc.hasOwnProperty(hostname))
    {
        var custom_brightness = my_custom_brightness_dc[hostname];
        if (!null_ls.includes(custom_brightness))
        {
            init_brightness = custom_brightness;
        }
    }
    // console.log("--- my_custom_brightness_dc:", my_custom_brightness_dc);

    // --- 根据主题来调节亮度
    function change_brightness_by_theme() {

        if (window.matchMedia('(prefers-color-scheme)').media === 'not all') {
            console.log('Browser doesn\'t support dark mode');
        }
        else
        {

            const isDarkTheme = window.matchMedia("(prefers-color-scheme: dark)"); // 是深色
            if (isDarkTheme.matches) { // 是深色
                // 主题设置为深色。
                cover(init_brightness);
            } else { // 不是深色
                // 主题设置为浅色。
                cover(1);
            }
        }

    }

    change_brightness_by_theme();

    let listeners={
        dark:(mediaQueryList )=>{
            if(mediaQueryList.matches){
                change_brightness_by_theme();
            }
        },
        light:(mediaQueryList)=>{
            if(mediaQueryList.matches){
                change_brightness_by_theme();
            }
        }
    }

    window.matchMedia('(prefers-color-scheme: dark)').addListener(listeners.dark)
    window.matchMedia('(prefers-color-scheme: light)').addListener(listeners.light)


    // --- 自定义右键菜单选项
    var menu_context_0 = "设置所有网站默认亮度";
    var menu_context_1 = "设置当前网站亮度";
    var menu_context_2 = "取消当前网站亮度";
    var menu_context_9 = "初始化设置";

    GM_registerMenuCommand (menu_context_0, function(){

        var input = prompt("请输入您想要的默认亮度(0~1之间的小数)", 0.66);
        var ret = cover(input);
        if (ret == 1)
        {
            var brightness = get_brightness_by_input(input);
            GM_setValue("default_brightness", brightness);
        }
    }, "h");

    GM_registerMenuCommand (menu_context_1, function(){

        var input = prompt("请输入当前网站的亮度(0~1之间的小数)", 0.66);
        var ret = cover(input);
        if (ret == 1)
        {
            my_custom_brightness_dc[""+hostname+""] = input;
            GM_setValue(key, my_custom_brightness_dc);
        }
    }, "h");

    GM_registerMenuCommand (menu_context_2, function(){
        cover(default_brightness);
        if(my_custom_brightness_dc.hasOwnProperty(hostname))
        {
            delete my_custom_brightness_dc[""+hostname+""];
            GM_setValue(key, my_custom_brightness_dc);
        }
    }, "h");


    GM_registerMenuCommand (menu_context_9, function(){
        cover(default_init_brightness);
        GM_setValue("default_brightness", "");
        GM_setValue(key, "");
    }, "h");

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址