You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7:如何在ckeditor_link插件中覆盖CKEditor的target属性清理规则

解决CKEditor移除target字段中[]字符的问题

针对你遇到的CKEditor链接对话框自动移除[dialog]中方括号的问题,我推荐直接在ckeditor_link插件内部修改处理逻辑,这样既能满足需求,又不会影响其他CKEditor功能。以下是具体实现步骤:

核心思路

问题出在CKEditor链接对话框的target字段commit函数里,原代码用replace(/\W/gi,"")移除了所有非单词字符(包括方括号)。我们需要重写这个函数,允许保留[]字符,从而让[dialog]完整保留在最终的链接中。

具体实现步骤

  1. 找到ckeditor_link插件的主文件(通常是ckeditor_link.js)
  2. 在插件的init方法中,添加对CKEditor对话框定义事件的监听,修改链接对话框的target字段处理逻辑:
CKEDITOR.plugins.add('ckeditor_link', {
    init: function(editor) {
        // 保留插件原有的初始化代码(比如自动补全相关逻辑)
        
        // 监听对话框加载事件,修改链接对话框的target处理
        editor.on('dialogDefinition', function(ev) {
            const dialogName = ev.data.name;
            const dialogDefinition = ev.data.definition;

            // 仅处理链接对话框
            if (dialogName === 'link') {
                // 获取"目标"标签页
                const targetTab = dialogDefinition.getContents('target');
                if (targetTab) {
                    // 获取target输入字段
                    const targetField = targetTab.get('target');
                    if (targetField && targetField.commit) {
                        // 重写commit函数,保留[]字符
                        targetField.commit = function(linkObj) {
                            linkObj.target || (linkObj.target = {});
                            // 只移除除了字母、数字、下划线和[]之外的非法字符
                            const targetValue = this.getValue();
                            linkObj.target.name = targetValue.replace(/[^\w\[\]]/gi, '');
                            // 如果不需要过滤任何字符,也可以直接用下面这行:
                            // linkObj.target.name = targetValue;
                        };
                    }
                }
            }
        });
    }
});

代码说明

  • 我们通过dialogDefinition事件拦截链接对话框的加载过程,修改其中target字段的commit函数。
  • 原正则/\W/gi会匹配所有非单词字符(包括[]),我们把它改成/[^\w\[\]]/gi,这样就会保留方括号和合法单词字符。
  • 如果你不需要对target值做任何过滤,可以直接把replace逻辑去掉,直接赋值linkObj.target.name = targetValue;,这样更简单。

验证与生效

修改完成后,记得清除Drupal的缓存和CKEditor的浏览器缓存,然后在WYSIWYG编辑器中测试:

  1. 插入内部链接,在"目标"标签页输入[dialog]
  2. 保存内容后查看源码,应该能看到<a href="your-internal-path" target="[dialog]">...</a>的正确格式,这样就能正常触发jQuery UI对话框功能了。

内容的提问来源于stack exchange,提问作者gwar9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:12:54