🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

Greasy Fork is available in English.

📂 缓存分发状态(共享加速已生效)
🕒 页面同步时间:2026/01/29 13:14:53
🔄 下次更新时间:2026/01/29 14:14:53
手动刷新缓存

Reddit Code Block Fix

Fixes triple backtick code blocks in old Reddit layout

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

// ==UserScript==
// @name        Reddit Code Block Fix
// @namespace   Violentmonkey Scripts
// @match       https://old.reddit.com/*
// @grant       GM_xmlhttpRequest
// @require     https://unpkg.com/[email protected]/dist/showdown.min.js
// @version     1.0
// @description Fixes triple backtick code blocks in old Reddit layout
// @license     WTFPL
// ==/UserScript==

const CONTENT_SELECTOR = '.thing[data-type="comment"], .thing[data-type="link"]';
const TIMEOUT = 2500;

const showdownOptions = {
    noHeaderId: true,
    strikethrough: true,
    tables: true,
    encodeEmails: false,
    simplifiedAutoLink: true,
    disableForced4SpacesIndentedSublists: true,
    extensions: ['redditSpoilerExtension']
};

showdown.extension('redditSpoilerExtension', function() {
    return [{
        type: 'lang',
        regex: /^(?!^    )([^\n]*?)>! *([^\n]+?) *!</gm,
        replace: "$1 <span class='md-spoiler-text' title='Reveal spoiler'>$2</span>"
    }];
});

function processContent(thing, utbody, body) {
    const converter = new showdown.Converter(showdownOptions);
    utbody.innerHTML = `<div class="md">${converter.makeHtml(body)}</div>`;
}

function handleResponse(response) {
    if (response.status !== 200) return;

    const { thing, utbody } = response.context;
    const json = JSON.parse(response.responseText);

    // Determine if it's a comment or post
    const body = thing.dataset.type === 'comment'
        ? json[1].data.children[0].data.body
        : json[0].data.children[0].data.selftext;

    processContent(thing, utbody, body);
}

function fixCodeBlocks() {
    document.querySelectorAll(CONTENT_SELECTOR).forEach(thing => {
        const utbody = thing.querySelector('.usertext-body');
        const permalink = thing.dataset.permalink;

        if (utbody?.innerText.includes('```') && permalink) {
            GM_xmlhttpRequest({
                method: 'GET',
                url: `${permalink}.json`,
                timeout: TIMEOUT,
                context: { thing, utbody },
                onload: handleResponse
            });
        }
    });
}

// Initialize after page loads
window.addEventListener('load', () => {
    if (typeof showdown !== 'undefined') {
        fixCodeBlocks();
    }
});