【问题标题】:Inline CKeditor integrated in GrapesJS editor集成在 GrapesJS 编辑器中的内联 CKeditor
【发布时间】:2020-12-09 10:43:59
【问题描述】:

我在一个实现了 GrapesJS 的编辑器应用程序中工作。它的编辑器和功能运行良好。我已将内联 CKeditor 集成到 GrapesJS 编辑器中,并且几乎没有问题。

  1. 显示了多个内联编辑选项
  2. 有时编辑器选项定位不正确
  3. 主要问题:显示内嵌选项,但未反映所选文本。我的意思是我们可以单击这些内联选项来格式化编辑器内容,但它不会反映在编辑器中。

在这里我分享一些编写的代码:

const editor = grapesjs.init({
    container: '#gjs',
    fromElement: 1,
    height: '100%',
    storageManager: { type: 0 },
    plugins: ['gjs-plugin-ckeditor']
});

editor.setCustomRte({
    enable: function(el, rte) {
        // If already exists just focus
        if (rte) {
            this.focus(el, rte); // implemented later
            return rte;
        }
    
        // CKEditor initialization
        rte = CKEDITOR.inline(el, {
            // Your configurations...
            toolbar: [
                { name: 'styles', items: ['Font', 'FontSize' ] },
                ['Bold', 'Italic', 'Underline', 'Strike'],
                {name: 'paragraph', items : [ 'NumberedList', 'BulletedList']},
                {name: 'links', items: ['Link', 'Unlink']},
                {name: 'colors', items: [ 'TextColor', 'BGColor' ]},
            ],
            uiColor: '#9AB8F3', // Inline editor color
            startupFocus: true,
            extraAllowedContent: '*(*);*{*}', // Allows any class and any inline style
            allowedContent: true, // Disable auto-formatting, class removing, etc.
            enterMode: CKEDITOR.ENTER_BR,
            // extraPlugins: 'sharedspace,justify,colorbutton,panelbutton,font',
            
            // sharedSpaces: {
            //  top: editor.RichTextEditor.getToolbarEl(),
            // }
        });
    
        this.focus(el, rte); // implemented later
        return rte;
    },
    focus(el, rte) {
        // Do nothing if already focused
        if (rte && rte.focusManager.hasFocus) {
            return;
        }
        el.contentEditable = true;
        rte && rte.focus();
    },
    disable(el, rte) {
        el.contentEditable = false;
        if (rte && rte.focusManager)
            rte.focusManager.blur(true);
    }
});

这里是JSFiddle,您可以在其中检查工作和代码。

版本:

grapesjs - 0.16.18

ckeditor - 标准 - 4.14.1

预期的行为是什么?

在应用内联 CKeditor 选项中的内联格式选项时,它应该反映在所选文本中。

详细描述错误:

我已经在grapesJS 编辑器中集成了CKeditor 用于内联编辑。目前,当我选择文本对其进行格式化时,内联 CKeditor 选项与其他几个选项一起显示在黑色工具栏中。我对此感到困惑。主要问题是,即使我使用任何内联格式选项,格式也不会反映在所选文本中。无法通过 CKeditor 内联选项执行任何操作,例如文本格式、列表、图片上传、链接等。

目前的行为是什么?

主要问题是即使我使用任何内联选项,格式也不会反映在所选文本中。无法通过 CKeditor 内联选项执行任何操作,例如文本格式、列表、图片上传、链接等。

【问题讨论】:

    标签: jquery ckeditor grapesjs


    【解决方案1】:

    如您所见,我没有收到 SO 的任何回复。我也在 Github 上报告了这个问题,在那里我看到了类似问题的回复。几天后,我得到了回复,对我来说效果很好。所以我希望与大家分享这个回复,这可能对像我这样的其他人有所帮助。

    我的第一个问题:显示了多个内联编辑选项

    GrapesJS CKEditor plugin 已经将 CKEditor 注册为 自定义 RTE,所以调用 editor.setCustomRte 实际上是设置了两次。

    我已经删除了editor.setCustomRte 块并且它工作正常。如果你想提供 CKEditor 选项,这应该在pluginsOpts 级别完成,如here 所示。

    这是我的第二个问题:有时编辑器选项定位不正确

    在删除 editor.setCustomRte 块后,此问题也得到了修复。

    而且,我在集成时遇到的最后一个主要问题:内联格式未反映在所选文本中

    GrapesJS CKEditor 插件依赖于Standard-All CKEditor version,而不是使用Standard CKEditor version。使用https://cdn.ckeditor.com/4.14.1/standard-all/ckeditor.js它会修复。

    这是一个有效的 fiddle,您可以参考它来了解 Inline CKEditor 与 GrapesJS 的集成

    额外说明:我在删除 editor.setCustomRte 块后遇到了另一个问题 - 这是我第一个问题的修复。它看起来像:

    ckeditor.js:270 Uncaught Error: [CKEDITOR.resourceManager.load] Resource name "sharedspace" was not found at "https://cdn.ckeditor.com/4.14.1/standard/plugins/sharedspace/plugin.js?t=K5H9".
        at CKEDITOR.resourceManager.<anonymous> (ckeditor.js:270)
        at e (ckeditor.js:265)
        at Array.x (ckeditor.js:265)
        at w (ckeditor.js:265)
        at HTMLScriptElement.CKEDITOR.env.ie.e.$.onerror (ckeditor.js:266)
    

    如果您遇到类似的错误,请注意这是因为您使用的 CKEditor 类型/版本。我使用的是Standard CKEditor version,这就是问题所在。改成Standard-All CKEditor version后,问题就解决了。

    Grapedrop 是一个站点,您可以在其中创建一个帐户并检查 GrapesJS 的几乎所有属性。

    这是 CKEditor 中使用的额外插件列表:

    dialogui,dialog,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,
    notification,button,toolbar,clipboard,panelbutton,panel,floatpanel,
    colorbutton,colordialog,templates,menu,contextmenu,copyformatting,div,
    resize,elementspath,enterkey,entities,exportpdf,popup,filetools,
    filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,
    forms,format,horizontalrule,htmlwriter,iframe,wysiwygarea,image,indent,
    indentblock,indentlist,smiley,justify,menubutton,language,link,list,
    liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastetools,
    pastefromgdocs,pastefromword,preview,print,removeformat,save,selectall,
    showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,
    tabletools,tableselection,undo,lineutils,widgetselection,widget,
    notificationaggregator,uploadwidget,uploadimage,wsc
    

    CKEditor Inline custom toolbar 选项添加为您的愿望

    更新: CKEditor Inline standard-all 版本仅适用于少数 HTML 标签行 &lt;div&gt;&lt;p&gt;&lt;h1&gt;-&lt;h6&gt;。这个内联编辑器不会针对strongispan 等元素弹出。这是上述问题的solution

    【讨论】:

    • 关于使用 CKEditor 的 Standard-All 版本:在您的 CKEditor 构建中包含共享空间插件 (ckeditor.com/cke4/addon/sharedspace) 就足够了。在grapesjs中使用CKEditor似乎不需要其他插件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多