3
var currentDialog = CKEDITOR.dialog.getCurrent();
currentDialog._.editor.insertHtml("<customTag myAttr='var'></customTag>");

抛出错误,TypeError: Cannot read property 'isBlock' of undefined

如果我尝试.insertHtml("<span>hello</span>")它就可以了。

如何更改 ckeditor 以允许我通过指定我自己的自定义 html 标签.insertHtml()?我很想把它改成类似<span class='custom'...或类似的东西,但我不得不处理遗留的 CMS 文章。使用最新的ckeditor。谢谢。

4

2 回答 2

5
  1. 您需要修改CKEDITOR.dtd对象,以便编辑器知道此标记并正确解析 HTML 并处理 DOM:

    CKEDITOR.dtd.customtag = { em:1 };        // List of tag names it can contain.
    CKEDITOR.dtd.$block.customtag = 1;        // Choose $block or $inline.
    CKEDITOR.dtd.body.customtag = 1;          // Body may contain customtag.
    
  2. 您需要在Advanced Content Filter中允许此标记及其样式/属性/类:

    editor.filter.allow( 'customtag[myattr]', 'myfeature' );
    

不幸的是,由于某些缓存,在某些情况下您无法在加载 CKEditor 后修改 DTD 对象——您需要在创建它时对其进行修改。所以要做到这一点:

  1. 克隆CKEditor 存储库CKEditor 预设存储库

  2. 修改core/dtd.js代码。

  3. 并按照以下说明构建您的缩小包README.md- 唯一的要求是 Java(抱歉 - Google Closure Compiler :P)和 Bash。

PS。插入未知元素时不应抛出该错误,因此我报告了http://dev.ckeditor.com/ticket/10339并解决了此不便http://dev.ckeditor.com/ticket/10340

于 2013-04-17T19:36:37.980 回答
0

我结合使用 createFromHtml() 和 insertElement() 解决了这个问题

CKEDITOR.replace('summary', { ... });

var editor = CKEDITOR.instances.summary; 
editor.on('key', function(ev) {
    if (ev.data.keyCode == 9) { // TAB
        var tabHtml = '<span style="white-space:pre">&#09;</span>';
        var tabElement = CKEDITOR.dom.element.createFromHtml(tabHtml, editor.document);
        editor.insertElement(tabElement);
    }
}
于 2013-06-27T09:17:54.357 回答