过氧化氢 浏览器插件

模块暂不可用: 此动态功能尚未由只读迁移站支持。

隐藏Saving Pages显示Saving Pages

WikiJump include 未展开: 本地数据库中没有引用的站点(:oxygennine:peroxide:layout-header-center)

WikiJump include 未展开: 本地数据库中没有引用的站点(:oxygennine:peroxide:palette-dark)

历代版本迭代。

当前版本(tag):v1.1.4

列表暂不可用: 此 ListPages 查询尚未由只读迁移站支持。

Rating: +52


[[note]]
重要:这不是批量编辑脚本,这这是一个用于数据连接、改善编辑体验的脚本,请不要使用此脚本进行批量编辑,请不要违反站规。如果你的GitHub显示404,大概率是版本迁移导致的,请前往更新脚本,目前的网页版链接为:
点击这里跳转
[[/note]]

h2o2-一秒变异

一键夺舍展示

h2o2-代码补全

代码补全

Wikidot 的编辑栏过于反人类,试试这个
点开编辑栏后加载可能有点慢,加载出来了如果是空的就说明在同步内容,请您耐心等待
由于wikidot的加载速度,请您耐心等待gif加载好,可能时间有点长
本项目采用AGPLv3协议授权
测试已通过,脚本和编辑器源代码仓库
点这里直接前往网页版编辑器


这里是wasd243wasd243, 脚本性能,“夺舍”暴力覆盖wikidot原窗口测试完毕。
正如你所见,这个基于GitHub Page的脚本可以完全“夺舍”wikidot的原生编辑栏,打开即用

唯一缺点是无法重制wikidot的编辑锁定,时间会一直进行,所以请在15分钟到了以后及时按下“重新创建编辑锁定”按钮

一些基础信息安装指导/说明书/快速上手我装好了/我进入web版了 如何使用

页面版式:过氧化物 基础版式
代码编辑:Code Mirror 6 lezer
代码高亮数据:
Wikidot代码高亮为我,也就是wasd243wasd243,参考浏览器配色自制
CSSHTML代码高亮引用源代码:

js
import { cssLanguage } from "@codemirror/lang-css"
import { htmlLanguage} from "@codemirror/lang-html"
|油猴脚本早期版本源代码归档(不建议使用)|——油猴脚本早期版本版本源代码归档(不建议使用)——
// ==UserScript==
// @name         H2O2 Wikidot Editor (Universal)
// @namespace    https://github.com/wasd243/SCP-Foundation-editor-web
// @version      2.0.0
// @description  加了个看门狗
// @icon         https://scpsandboxcn.wikidot.com/local--files/peroxide-hyroperoxide/%E6%97%A0%E5%B0%BD%E5%82%AC%E5%8C%96%E5%89%82%EF%BC%88%E7%8E%84%E5%AD%A6%E4%BB%A3%E7%A0%81%E9%95%87%E5%9C%BA%E5%AD%90%EF%BC%89
// @author       wasd243
// @match        *://*.wikidot.com/*
// @license      AGPLv3
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function () {
    'use strict';

    var EDITOR_URL = 'https://wasd243.github.io/SCP-Foundation-editor-web/index.html';
    var IFRAME_ID = 'h2o2-editor-frame';
    var OBSERVER_KEY = '__h2o2_observer__';

    // ── 消息同步:iframe → textarea ───────────────────────────
    window.addEventListener('message', function (event) {
        if (event.origin !== 'https://wasd243.github.io') return;
        if (!event.data || event.data.type !== 'h2o2-update') return;
        var ta = document.getElementById('edit-page-textarea');
        if (!ta) return;
        ta.value = event.data.payload;
        ta.dispatchEvent(new Event('input', { bubbles: true }));
    });

    // ── 注入逻辑 ──────────────────────────────────────────────
    function inject(ta) {
        if (document.getElementById(IFRAME_ID)) return;

        var waited = 0;
        var poller = setInterval(function () {
            waited += 100;
            var content = ta.value;
            if (content.length > 0 || waited >= 3000) {
                clearInterval(poller);
                doInject(ta, content);
            }
        }, 100);
    }

    function doInject(ta, content) {
        if (document.getElementById(IFRAME_ID)) return;
        console.log('H2O2: 注入,内容长度', content.length);

        ta.style.setProperty('display', 'none', 'important');

        var toolbar = document.getElementById('wd-editor-toolbar-panel');
        if (toolbar) toolbar.style.setProperty('display', 'none', 'important');
        document.querySelectorAll('.change-textarea-size').forEach(function (el) {
            el.style.setProperty('display', 'none', 'important');
        });

        var iframe = document.createElement('iframe');
        iframe.id = IFRAME_ID;
        iframe.src = EDITOR_URL;
        iframe.style.cssText = [
            'width: 100%',
            'height: 70vh',
            'min-height: 520px',
            'border: none',
            'border-radius: 4px',
            'display: block',
            'margin-bottom: 8px'
        ].join('; ');

        ta.parentNode.insertBefore(iframe, ta);

        iframe.addEventListener('load', function () {
            setTimeout(function () {
                try {
                    iframe.contentWindow.postMessage(
                        { type: 'h2o2-init', payload: content }, '*'
                    );
                    console.log('H2O2: 内容已推送,长度', content.length);
                } catch (e) {
                    console.warn('H2O2: postMessage 失败', e);
                }
            }, 500);
        });
    }

    // ── 启动一个 MutationObserver 实例 ───────────────────────
    function startObserver() {
        // 断开旧的
        if (window[OBSERVER_KEY]) {
            try { window[OBSERVER_KEY].disconnect(); } catch (e) {}
        }

        var obs = new MutationObserver(function () {
            var ta = document.getElementById('edit-page-textarea');
            var iframe = document.getElementById(IFRAME_ID);

            if (!ta && iframe) {
                console.log('H2O2: 编辑结束,清理 iframe');
                iframe.remove();
                return;
            }
            if (ta && !iframe) {
                inject(ta);
            }
            if (ta) {
                ta.style.setProperty('display', 'none', 'important');
            }
        });

        obs.observe(document.documentElement, { childList: true, subtree: true });
        window[OBSERVER_KEY] = obs;
        console.log('H2O2: Observer 已(重)启动');
    }

    // ── 看门狗:每秒检查 Observer 是否还活着 ─────────────────
    // Warning: Wikidot AJAX is a monster. Do NOT remove this watchdog unless you want to lose your soul (and your drafts).
    // 原理:给 Observer 实例打一个存活标记,
    // 如果标记消失或 Observer 对象丢失,立刻重建。
    setInterval(function () {

        // 检查 Observer 是否还挂在 window 上
        if (!window[OBSERVER_KEY]) {
            console.warn('H2O2: Observer 丢失,重建中…');
            startObserver();
            return;
        }

        // 顺带检查:有 textarea 但没有 iframe,说明注入失败了,补注入
        var ta = document.getElementById('edit-page-textarea');
        var iframe = document.getElementById(IFRAME_ID);
        if (ta && !iframe) {
            console.warn('H2O2: 发现未注入的 textarea,补注入');
            inject(ta);
        }

        // 有 textarea 就持续压制
        if (ta) {
            ta.style.setProperty('display', 'none', 'important');
        }

        // 没有 textarea 就清理僵尸 iframe
        if (!ta && iframe) {
            iframe.remove();
        }

    }, 1000);

    // ── 启动 ──────────────────────────────────────────────────
    startObserver();

    // 页面加载时立即检查一次
    var ta = document.getElementById('edit-page-textarea');
    if (ta) inject(ta);

    console.log('H2O2: v2.0.0 已启动');
})();









Footnotes
  1. 1.Microsoft Edge浏览器或Chromium插件里都有
  2. 2.已开启
  3. 3.找脚本
  4. 4.创建新脚本
  5. 5.捐款
  6. 6.工具箱
  7. 7.仪表盘
  8. 8.我在这里列出了所用图标“无尽贪婪”Avaritia模组1.7.10原版的GitHub链接
  9. 9.这里有点绕,我当时以为是wikidot的屎山AJAX发力了把我的脚本关了,结果一看是我手动关的
  10. 10.可能是油猴的bug
  11. 11.为了确保您写好的稿子被完美上传至wikidot,请您在“保存”时记得展开(虽然不展开也没影响)本地备份一下当然是最好的,因为我删掉了本地缓存防XSS
页面版本:⁨0⁩, 最后编辑于: ⁨2026/4/4 03:25:51⁩ (⁨⁨165⁩ 日前⁩), 现时评分: 52