Greasy Fork

来自缓存

Greasy Fork is available in English.

[开发向]方便的运行JS和添加CSS

右下角添加两个按钮,一个运行JS代码,一个添加CSS样式

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name [开发向]方便的运行JS和添加CSS
// @namespace JS_CSS
// @version 1
// @description 右下角添加两个按钮,一个运行JS代码,一个添加CSS样式
// @author LWF
// @license MIT
// @grant none
// @match *://*/*
// @run-at document-start
// ==/UserScript==

(function() {
    'use strict';

    const style = document.createElement("style");
    style.innerHTML = `
        #js-runner-btn, #css-runner-btn {
            position: fixed;
            bottom: 20px;
            width: 56px;
            height: 56px;
            color: white;
            border-radius: 50%;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
            display: flex;
            align-items: center;
            justify-content: center;
            cursor: pointer;
            font-size: 24px;
            z-index: 1001;
            transition: box-shadow 0.3s;
        }

        #js-runner-btn {
            right: 20px;
            background-color: #00897B;
        }

        #js-runner-btn:hover {
            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.4);
        }

        #css-runner-btn {
            right: 90px;
            background-color: #6E57B0;
        }

        #css-runner-btn:hover {
            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.4);
        }

        /* 遮罩层样式 */
        #runner-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(0, 0, 0, 0.6); /* 半透明黑色 */
            z-index: 1000;
        }

        #js-runner-dialog, #css-runner-dialog {
            display: none;
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            width: 90%;
            max-width: 400px;
            background: white;
            border-radius: 8px;
            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
            z-index: 1002; /* 高于遮罩层 */
        }

        #js-runner-header, #css-runner-header {
            padding: 12px;
            color: white;
            border-top-left-radius: 8px;
            border-top-right-radius: 8px;
            font-size: 18px;
            font-weight: bold;
            text-align: center;
            position: relative;
        }

        #js-runner-header {
            background-color: #00897B;
        }

        #css-runner-header {
            background-color: #6E57B0;
        }

        /* 增大关闭按钮尺寸 */
        #js-runner-close, #css-runner-close {
            position: absolute;
            top: 8px;
            right: 12px;
            font-size: 24px; /* 增大关闭按钮的字体大小 */
            cursor: pointer;
        }

        #js-runner-body, #css-runner-body {
            padding: 16px;
        }

        #js-runner-input, #css-runner-input {
            width: 100%;
            height: 100px;
            padding: 8px;
            font-size: 14px;
            border: 1px solid #ddd;
            border-radius: 4px;
            resize: vertical;
            box-sizing: border-box;
        }

        #js-runner-footer, #css-runner-footer {
            padding: 12px;
            text-align: right;
        }

        #js-runner-run-btn, #css-runner-run-btn {
            color: white;
            padding: 8px 16px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 14px;
            transition: background-color 0.3s;
        }

        #js-runner-run-btn {
            background-color: #00897B;
        }

        #js-runner-run-btn:hover {
            background-color: #00695C;
        }

        #css-runner-run-btn {
            background-color: #6E57B0;
        }

        #css-runner-run-btn:hover {
            background-color: #4B3B8D;
        }
    `;
    document.head.appendChild(style);

    // 创建遮罩层
    const overlay = document.createElement("div");
    overlay.id = "runner-overlay";
    document.body.appendChild(overlay);

    // 创建 JS 按钮
    const jsButton = document.createElement("div");
    jsButton.id = "js-runner-btn";
    jsButton.textContent = "⚙";
    document.body.appendChild(jsButton);

    // 创建 CSS 按钮
    const cssButton = document.createElement("div");
    cssButton.id = "css-runner-btn";
    cssButton.textContent = "🎨";
    document.body.appendChild(cssButton);

    // 创建 JS 弹出框
    const jsDialog = document.createElement("div");
    jsDialog.id = "js-runner-dialog";
    jsDialog.innerHTML = `
        <div id="js-runner-header">
            运行 JavaScript 代码
            <span id="js-runner-close">×</span>
        </div>
        <div id="js-runner-body">
            <textarea id="js-runner-input" placeholder="在此输入 JavaScript 代码"></textarea>
        </div>
        <div id="js-runner-footer">
            <button id="js-runner-run-btn">运行</button>
        </div>
    `;
    document.body.appendChild(jsDialog);

    // 创建 CSS 弹出框
    const cssDialog = document.createElement("div");
    cssDialog.id = "css-runner-dialog";
    cssDialog.innerHTML = `
        <div id="css-runner-header">
            添加 CSS 样式
            <span id="css-runner-close">×</span>
        </div>
        <div id="css-runner-body">
            <textarea id="css-runner-input" placeholder="在此输入 CSS 样式"></textarea>
        </div>
        <div id="css-runner-footer">
            <button id="css-runner-run-btn">添加</button>
        </div>
    `;
    document.body.appendChild(cssDialog);

    // 显示 JS 对话框和遮罩层
    jsButton.addEventListener("click", () => {
        overlay.style.display = "block";
        jsDialog.style.display = "block";
    });

    // 显示 CSS 对话框和遮罩层
    cssButton.addEventListener("click", () => {
        overlay.style.display = "block";
        cssDialog.style.display = "block";
    });

    // 运行 JS 代码并关闭对话框和遮罩层
    document.getElementById("js-runner-run-btn").addEventListener("click", () => {
        const code = document.getElementById("js-runner-input").value;
        try {
            eval(code);
        } catch (error) {
            alert("执行出错:" + error.message);
        }
        jsDialog.style.display = "none";
        overlay.style.display = "none";
        document.getElementById("js-runner-input").value = ""; // 清空输入框
    });

    // 添加 CSS 样式并关闭对话框和遮罩层
    document.getElementById("css-runner-run-btn").addEventListener("click", () => {
        const cssCode = document.getElementById("css-runner-input").value;
        const cssStyle = document.createElement("style");
        cssStyle.innerHTML = cssCode;
        document.head.appendChild(cssStyle);
        cssDialog.style.display = "none";
        overlay.style.display = "none";
        document.getElementById("css-runner-input").value = ""; // 清空输入框
    });

    // 关闭 JS 对话框和遮罩层
    document.getElementById("js-runner-close").addEventListener("click", () => {
        jsDialog.style.display = "none";
        overlay.style.display = "none";
    });

    // 关闭 CSS 对话框和遮罩层
    document.getElementById("css-runner-close").addEventListener("click", () => {
        cssDialog.style.display = "none";
        overlay.style.display = "none";
    });
})();