希速云api JSON Formatter

希速云api JSON格式化

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         希速云api JSON Formatter
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  希速云api JSON格式化
// @author       jiemo
// @match        https://api.sdbj.top/api/*
// @noframes
// @grant        GM_addStyle
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 唯一的触发条件:URL中是否包含 "apiKey" 这个词
    if (!window.location.href.includes('apiKey')) {
        return; // 如果不包含,脚本立即停止,不执行任何操作
    }

    // =========================================================================
    // 如果脚本执行到这里,说明URL匹配成功,下面的日志一定会显示在F12控制台
    console.log('[JSON Formatter] URL matched. Script is running.');
    // =========================================================================

    function formatJsonContent(text) {
        try {
            const jsonObj = JSON.parse(text.trim());
            console.log('[JSON Formatter] Successfully parsed JSON.');

            // 清空页面,准备注入格式化后的内容
            document.body.innerHTML = '';
            document.head.innerHTML = '';

            GM_addStyle(`
                body {
                    margin: 0; padding: 0; background-color: #282c34;
                    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
                }
                pre {
                    padding: 20px; margin: 0; font-size: 14px;
                    white-space: pre-wrap; word-break: break-all; color: #abb2bf;
                }
            `);

            const pre = document.createElement('pre');
            pre.textContent = JSON.stringify(jsonObj, null, 4); // 4个空格缩进
            document.body.appendChild(pre);
            return true;
        } catch (e) {
            console.error('[JSON Formatter] Failed to parse content as JSON.', e);
            return false;
        }
    }

    // 检查页面是否已经有内容
    const initialText = document.body.textContent;
    if (initialText && initialText.trim().length > 2) {
        console.log('[JSON Formatter] Content already exists on page load. Attempting to format.');
        formatJsonContent(initialText);
        return;
    }

    // 如果页面加载时是空的,则使用 MutationObserver 等待内容出现
    console.log('[JSON Formatter] Page is empty. Setting up MutationObserver to wait for content.');
    const observer = new MutationObserver((mutations, obs) => {
        const bodyText = document.body.textContent;
        if (bodyText && bodyText.trim().length > 2) {
            console.log('[JSON Formatter] Detected content added to the page.');
            if (formatJsonContent(bodyText)) {
                obs.disconnect(); // 任务完成,停止观察
                console.log('[JSON Formatter] Observer disconnected.');
            }
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });

})();