CKEditor链接对话框删除协议

6

在我的CKEditor中,我删除了链接对话框中的“linkType”和“protocol”输入。

   CKEDITOR.on( 'dialogDefinition', function( ev )
    {
        var dialogName = ev.data.name;
        var dialogDefinition = ev.data.definition;

        if ( dialogName == 'link' )
        {
            var infoTab = dialogDefinition.getContents( 'info' );
            infoTab.remove( 'linkType' );
            infoTab.remove( 'protocol' );
        }

    });

然而,每次我输入像https://google.com这样的内容时,只要我键入“g”,https://就被删除了。
我检查了输出,它总是显示http://,而不管输入的内容是什么。
请问如何关闭这个愚蠢的行为?
5个回答

12

经过大量的研究、调试和优化,我终于成功了!!!

这是我的做法:

CKEDITOR.on('dialogDefinition', function(e) {
    // NOTE: this is an instance of CKEDITOR.dialog.definitionObject
    var dd = e.data.definition; 

    if (e.data.name === 'link') {
        dd.minHeight = 30;

        // remove the unwanted tabs
        dd.removeContents('advanced');
        dd.removeContents('target');
        dd.removeContents('upload');

        // remove all elements from the 'info' tab
        var tabInfo = dd.getContents('info');
        while (tabInfo.elements.length > 0) {
            tabInfo.remove(tabInfo.elements[0].id);
        }

        // add a simple URL text field
        tabInfo.add({
            type : 'text',
            id : 'urlNew',
            label : 'URL',
            setup : function(data) {
                var value = '';
                if (data.url) {
                    if (data.url.protocol) {
                        value += data.url.protocol;
                    }
                    if (data.url.url) {
                        value += data.url.url;
                    }
                } else if (data.email && data.email.address) {
                    value = 'mailto:' + data.email.address;
                }
                this.setValue(value);
            },
            commit : function(data) {
                data.url = { protocol: '', url: this.getValue() };
            }
        });
    }
});

我是CKeditor的新手。我想知道应该把这段代码放在哪里?是放在link.js里面吗?还是直接放在我的页面里? - user2699175
1
@user2699175 将上述代码添加到位于 ckeditor 根目录下的 config.js 中。 - Avatar
+1 嘿,谢谢你,每次被要求修改 ckeditor 的东西时,我都会感到不安。这个答案为我节省了大量的研究时间。如果可以的话,我会给你 SO 黄金奖章的。 - Loktar
@LanceJava在当前版本中已经不完全可用了,只有当用户选择了任何文本时才能使用:( 您是否可以将其更新为ckeditor 4.4?如果没有选择任何内容,那么仅使用URL作为文本输入链接会更好! - Zulakis

2

以下是我在 v4.5.1 中去除协议的方法:

CKEDITOR.on('dialogDefinition', function(ev) {
    var dialogName = ev.data.name;
    var dialogDefinition = ev.data.definition;

    if (dialogName === 'link') {
        var infoTab = dialogDefinition.getContents('info');
        infoTab.remove('protocol');

        var url = infoTab.get('url');
        url.onKeyUp = function(){};
        url.setup = function(data) {
            this.allowOnChange = false;
            if (data.url) {
                var value = '';
                if (data.url.protocol) {
                    value += data.url.protocol;
                }
                if (data.url.url) {
                    value += data.url.url;
                }
                this.setValue(value);
            }
            this.allowOnChange = true;
        };
        url.commit = function(data) {
            data.url = { protocol: '', url: this.getValue() };
        };
    }
});

1

最近我发现了一种方法,可以隐藏链接类型,这样你就不必完全删除它。将样式设置为display: none,如下所示:

infoTab.get( 'linkType' ).style = 'display: none';

我认为这个方法同样适用于协议,但我没有测试过。我在这里回答了同样的问题。
希望能对某人有所帮助!

1

恐怕没有其他方法可以更改它。您必须手动编辑一些代码行以使其按照您的方式工作。


0

对于像我这样的懒人,只需快速修改核心文件:

  1. 打开 plugins/link/dialogs/link.js
  2. 在最小化版本中找到 d=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);
  3. 删除 http|https|ftp|
  4. 保存文件,上传到您的服务器

如果重新加载后仍无法正常工作,则可能是缓存问题。在私密模式下打开浏览器,导航到您的 ckeditor 并再次尝试。祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接