• 注册
  • 前端后端 前端后端 关注:1 内容:70

    关闭 UEditor编辑器 自动修改代码的所有功能

  • 查看作者
  • 打赏作者
  • 帅气冲天

    要完全关闭 UEditor 自动修改代码的所有功能,需要禁用 UEditor 内部的自动格式化和清理规则。

    这涉及到修改 UEditor 的配置和相关插件,以下是一些我亲测的方法:

    方法一:禁用自动清理和格式化规则

    在插件代码中禁用自动清理和格式化规则,例如 basestyle 插件。

    可以直接修改插件代码以禁用这些功能。

    修改 basestyle 插件,注释掉或删除不需要的代码:

    UE.plugins.basestyle = function () {
        var e = {bold: ["strong", "b"], italic: ["i", "em"], subscript: ["sub"], superscript: ["sup"]},
            t = function (e, t) { return domUtils.filterNodeList(e.selection.getStartElementPath(), t); },
            n = this;
    
        n.addshortcutkey({Bold: "ctrl+66", Italic: "ctrl+73", Underline: "ctrl+85"});
    
        // 注释掉或删除自动格式化规则
        /*
        n.addInputRule(function (e) {
            utils.each(e.getNodesByTagName("b i"), function (e) {
                switch (e.tagName) {
                    case "b":
                        e.tagName = "strong";
                        break;
                    case "i":
                        e.tagName = "em";
                }
            });
        });
        */
    
        for (var i in e) !function (e, i) {
            n.commands[e] = {
                execCommand: function (e) {
                    var o = n.selection.getRange(), r = t(this, i);
                    if (o.collapsed) {
                        if (r) {
                            var a = n.document.createTextNode("");
                            o.insertNode(a).removeInlineStyle(i), o.setStartBefore(a), domUtils.remove(a);
                        } else {
                            var s = o.document.createElement(i[0]);
                            "superscript" != e && "subscript" != e || (a = n.document.createTextNode(""), o.insertNode(a).removeInlineStyle(["sub", "sup"]).setStartBefore(a).collapse(!0)), o.insertNode(s).setStart(s, 0);
                        }
                        o.collapse(!0);
                    } else "superscript" != e && "subscript" != e || r && r.tagName.toLowerCase() == e || o.removeInlineStyle(["sub", "sup"]), r ? o.removeInlineStyle(i) : o.applyInlineStyle(i[0]);
                    o.select();
                },
                queryCommandState: function () { return t(this, i) ? 1 : 0; }
            };
        }(i, e[i]);
    };

    方法二:禁用自动保存和格式化

    在 UEditor 的配置文件(通常是 ueditor.config.js)中,设置相关配置项以禁用自动保存和格式化功能。

    window.UEDITOR_CONFIG = {
        // 禁用自动保存
        enableAutoSave: false,
        // 设置保存间隔为很长的时间,实际上禁用了自动保存
        saveInterval: 86400 * 1000,
    
        // 禁用自动格式化
        pasteplain: true,
        autotypeset: {
            removeEmptyline: false,
            removeClass: false,
            removeEmptyNode: false,
            textAlign: false,
            imageBlockLine: false,
            pasteFilter: false,
            clearFontSize: false,
            clearFontFamily: false,
            removeEmptyline: false,
            mergeEmptyline: false,
            indent: false,
            indentValue: '0',
            bdc2sb: false,
            tobdc: false,
        },
    
        // 保留标签和属性
        filterRules: {}
    };

    方法三:禁用粘贴过滤

    可以禁用粘贴过滤功能,防止在粘贴内容时自动格式化

    UE.plugins.paste = function () {
        var me = this;
    
        me.commands['paste'] = {
            execCommand: function () {
                // 禁用粘贴过滤功能
                // 将内容原样插入,不进行任何处理
            }
        };
    };

    方法四:定制过滤规则

    可以通过定制过滤规则来控制 UEditor 的行为

    UE.plugins['filter'] = function () {
        var me = this;
    
        me.addInputRule(function (root) {
            // 禁用所有过滤规则
        });
    
        me.addOutputRule(function (root) {
            // 禁用所有输出规则
        });
    };

    请登录之后再进行评论

    登录

    我关注的论坛

    暂没有数据

  • 发布内容
  • 做任务
  • 偏好设置
  • 直达底部
  • 帖子间隔 侧栏位置: