Javascript 禁用编辑器缩进插件

Javascript 禁用编辑器缩进插件,javascript,ckeditor,Javascript,Ckeditor,我需要在CKEditor(4.2或4.3)中完全禁用有序和无序列表(,)的缩进,因为我需要将HTML(非常有限的子集)转换为另一种不支持缩进的标记语言 我尝试过几种方法,但没有任何运气: 尝试1:通过配置删除插件 config.removePlugins='indent,indentlist,indentblock' 我想这是行不通的,因为这些插件似乎是必需的——在从网站构建CKEditor包时,您不能删除它们 通过FireBug控制台查看CKEDITOR.plugins时,这些插件仍然存在。甚

我需要在CKEditor(4.2或4.3)中完全禁用有序和无序列表(
)的缩进,因为我需要将HTML(非常有限的子集)转换为另一种不支持缩进的标记语言

我尝试过几种方法,但没有任何运气:

尝试1:通过配置删除插件

config.removePlugins='indent,indentlist,indentblock'

我想这是行不通的,因为这些插件似乎是必需的——在从网站构建CKEditor包时,您不能删除它们

通过FireBug控制台查看
CKEDITOR.plugins
时,这些插件仍然存在。甚至不存在自己的插件文件夹-似乎它们是内置到核心的

尝试2:覆盖选项卡键

我创建了一个新插件
disableTab
,它完全不做任何事情(除了执行时
返回true;

插件已注册为TAB键击键的处理程序:

config.keystrokes = [
     [ 9, 'disableTab' ] // disable TAB key to avoid nesting!
];
editor.on('key', function(e) { alert ("hi"); return false; });
不幸的是,当按下列表第一级的tab键(
  • )时,插件无法工作。有趣的是,当在列表的第二级(
    ol>li>ol>li
    )中按TAB键时,它会起作用,但在第二级以下不会生成更多嵌套列表。我确信我的插件已经执行,因为我在插件中插入了一个
    alert()
    ,用于测试。至少,我的Firefox就是这样

    但我需要完全禁用缩进,而不仅仅是在level>2以上

    在编辑器配置中尝试3:通过
    blockedKeystrokes
    阻止击键:

    不起作用,即使根据文档,它应该:

    config.blockedKeystrokes = [ 9 ];
    
    尝试4:在运行时删除击键

    根据API文档,此代码应禁用击键,但由于某些原因无法工作:

    for (instance in CKEDITOR.instances) {
        var editor = CKEDITOR.instances[instance];
        editor.setKeystroke(9, false);
    }
    
    知道如何删除CKEditor中列表的缩进吗?

    我不明白为什么这些方法都不起作用。如果你知道原因,请告诉我

    更新:

    有趣的是,除了按TAB键外,几乎每一个按键事件都会出现此代码:

    config.keystrokes = [
         [ 9, 'disableTab' ] // disable TAB key to avoid nesting!
    ];
    
    editor.on('key', function(e) { alert ("hi"); return false; });
    
    因此,我的设置(LinuxMint 13[Gnome 2]+Firefox 18+CKEditor 4.2)似乎没有为TAB键启动键事件处理程序。也许缩进插件使用了其他事件?模糊

    更新2:


    这是Firefox(可能仅限linux)的问题。有几种方法适用于Chrome或Internet Explorer。

    尝试将代码更改为:

    editor = CKEDITOR.replace( 'element_name' );
    
    editor.on('key', function(e) {
    var key = e.data.keyCode;      
    if(key==9) {
    return false;
    }
    

    这样应该可以,只需将“element_name”更改为要用ckeditor替换的文本区域,然后尝试将代码更改为:

    editor = CKEDITOR.replace( 'element_name' );
    
    editor.on('key', function(e) {
    var key = e.data.keyCode;      
    if(key==9) {
    return false;
    }
    

    这应该行得通,只需将“element_name”更改为您要用ckeditor替换的文本区域,我刚刚快速检查了一下,它看起来像是
    列表
    插件需要
    缩进列表
    ,如果您:

    0)从下载CKEditor源

    1) 除去

    plugins/list/plugin.js

    2) 除去

    dev/builder/build config.js

    3) 使用
    dev/builder/Build.sh
    构建发布包(在Windows上使用“Git Bash”shell)

    您将在
    dev/builder/release/ckeditor
    文件夹中找到所需的发布版本


    (一个必需的插件不是真正必需的,这很少见,但是一个不需要列表缩进的插件也很少见;-)

    我刚刚快速地检查了一下,看起来虽然
    indentlist
    列表
    插件所必需的,如果您:

    0)从下载CKEditor源

    1) 除去

    plugins/list/plugin.js

    2) 除去

    dev/builder/build config.js

    3) 使用
    dev/builder/Build.sh
    构建发布包(在Windows上使用“Git Bash”shell)

    您将在
    dev/builder/release/ckeditor
    文件夹中找到所需的发布版本


    (一个必需的插件不是真正必需的,这很少见,但列表不需要缩进也很少见;-)

    内置的缩进列表插件在处理事件时取消冒泡,因此不会触发tab键的标准事件侦听器。如果将事件的优先级设置为首先运行,则可以捕获tab键事件并阻止它缩进列表

    例:

    如果只想阻止编号列表上的缩进,可以添加以下条件:

    editor.on('key', function (evt) {
        var path = editor.elementPath();
    
        if (editor.mode != 'wysiwyg') {
            return false;
        }
    
        if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9 && path.contains('ol')) {
            evt.cancel();
            return false;
        }
    }, null, null, 1);
    

    此处的文档中概述了事件优先级:

    内置的indentlist插件在处理事件时取消事件冒泡,因此不会触发tab键的标准事件侦听器。如果将事件的优先级设置为首先运行,则可以捕获tab键事件并阻止它缩进列表

    例:

    如果只想阻止编号列表上的缩进,可以添加以下条件:

    editor.on('key', function (evt) {
        var path = editor.elementPath();
    
        if (editor.mode != 'wysiwyg') {
            return false;
        }
    
        if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9 && path.contains('ol')) {
            evt.cancel();
            return false;
        }
    }, null, null, 1);
    

    此处的文档中概述了事件优先级:

    查看此操作是否有效:
    editorInstace.on(“key”,function(e){return e.data.keyCode!==9;})查看是否有效:
    editorInstace.on(“key”,函数(e){returne e.data.keyCode!==9;})不起作用。有趣的是,
    editor.on('key',function(e){alert(“hi”);return false;}
    向我问候除了TAB之外的几乎所有键!在我的Linux+Firefox+CKEditor设置中,TAB键似乎没有触发
    on('key”)
    事件!那么,我该如何更改它呢?;)上面的代码成功地禁用了我在CKEditor中的TAB按钮,但我使用的是Windows+Chrome+CKEditor 4.3.1安装程序。已确认。适用于Chromium(Linux)和IE(Windows)。是与Firefox相关的问题。不起作用。有趣的是,
    editor.on('key',function(e){alert(“hi”);return false;}
    向我问候几乎所有的键,除了TAB!