CKeditor自定义插件allowedContent不起作用

时间:2017-10-27 11:34:18

标签: ckeditor

我正在创建一个允许编辑itemprop属性的自定义插件。 它的效果很好,除了在重新加载时,属性被剥夺了。 知道我做错了吗?

我阅读了文档中可以找到的所有内容,包括此示例:https://github.com/ckeditor/ckeditor-docs-samples/blob/master/tutorial-abbr-acf/abbr/plugin.js#L24

如果我禁用ACF,它就会起作用。



export default CKEDITOR => {
    CKEDITOR.plugins.add('itemprop', {
        init(editor) {
            editor.addCommand('itemprop', new CKEDITOR.dialogCommand('itempropDialog', {
                allowedContent: '*[itemprop]'
            }));

            CKEDITOR.dialog.add('itempropDialog', editor => {
                return {
                    title: 'Itemprop',
                    contents: [
                        {
                            id: 'tab-main',
                            label: 'Itemprop',
                            elements: [
                                {
                                    type: 'text',
                                    id: 'itemprop',
                                    label: 'Itemprop',
                                    setup(element) {
                                        this.setValue(element.getAttribute('itemprop'));
                                    },
                                    commit(element) {
                                        element.setAttribute('itemprop', this.getValue());
                                    }
                                }
                            ]
                        }
                    ],
                    onShow() {
                        const selection = editor.getSelection();
                        const element = selection.getStartElement();
                        this.element = element;
                        this.setupContent(this.element);
                    },
                    onOk() {
                        this.commitContent(this.element);
                    }
                };
            });
        }
    });
};




1 个答案:

答案 0 :(得分:2)

我怀疑它可能与CKEditor中的这个错误有关:https://github.com/ckeditor/ckeditor-dev/issues/678

我做了一个简单的测试,当我向工具栏添加一个按钮时,您的代码就开始工作了。允许带有itemprop条目的内容也可以在CKEditor允许的过滤器中显示,而无需在编辑器配置中定义它。这就是为什么最简单的解决方案是为你的插件添加一个按钮:

editor.ui.addButton( 'itemprop', {
  label: 'Item Prop',
  command: 'itemprop'
});

整个插件定义如下:

CKEDITOR.plugins.add('itemprop', {
  init(editor) {

    editor.ui.addButton( 'itemprop', {
      label: 'Item Prop',
      command: 'itemprop'
    });

    editor.addCommand('itemprop', new CKEDITOR.dialogCommand('itempropDialog', {
      allowedContent: '*[itemprop]'
    }));

    CKEDITOR.dialog.add('itempropDialog', editor => {
      return {
        title: 'Itemprop',
        contents: [
          {
            id: 'tab-main',
            label: 'Itemprop',
            elements: [
              {
                type: 'text',
                id: 'itemprop',
                label: 'Itemprop',
                setup(element) {
                  this.setValue(element.getAttribute('itemprop'));
                },
                commit(element) {
                  element.setAttribute('itemprop', this.getValue());
                }
              }
            ]
          }
        ],
        onShow() {
          const selection = editor.getSelection();
          const element = selection.getStartElement();
          this.element = element;
          this.setupContent(this.element);
        },
        onOk() {
          this.commitContent(this.element);
        }
      };
    });
  }
});

这里的工作示例:https://codepen.io/msamsel/pen/RjbOpP?editors=1010