【问题标题】:CKEditor: call a plugin function without toolbar buttonCKEditor:调用没有工具栏按钮的插件函数
【发布时间】:2017-03-08 20:01:18
【问题描述】:

如何在没有工具栏按钮的情况下调用插件函数?

我的 cms 中集成了一个外部浮动工具栏。我使用 CKEditor 的 InsertHTML() API 插入图像、视频和其他静态代码。

现在我还需要从 URL 插入视频,并且有很棒的 oembed 插件。如何在没有工具栏按钮的情况下使用我的 cms 中的按钮触发该插件?

我在我的配置中加载插件,并尝试创建这个函数:

function oembed() {
// Get the editor instance that we want to interact with.
var editor = CKEDITOR.instances.editor1;
var url = 'http://www.youtube.com/watch?v=AQmbsmT12SE'
var wrapperHtml = jQuery('<div />').append(editor.config.oembed_WrapperClass != null ? '<div class="' + editor.config.oembed_WrapperClass + '" />' : '<div />');

// Check the active editing mode.
if ( editor.mode == 'wysiwyg' )
{
    // Insert HTML code.
    // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml
    editor.embedCode(url, editor, false, wrapperHtml, 650, 400, false);
}
else
    alert( 'You must be in WYSIWYG mode!' );

}

结果是这样的:

Uncaught TypeError: Object [object Object] has no method 'embedCode'

有没有办法创建一个新的 API,比如“InsertHTML”来调用没有工具栏按钮的插件函数?

编辑

也许我可以使用 createFakeElement API。

http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-createFakeElement

我将 fakegallery 类添加到我的文档中。

我使用此代码,但没有任何反应:

      function Fake()
   {
      var editor = CKEDITOR.instances.editor1;
      var element = CKEDITOR.dom.element.createFromHtml( '<div class="bold"><b>Example</b></div>' );
      alert( element.getOuterHtml() ); 
      editor.createFakeElement( element, 'fakegallery', 'div', false );

   }

【问题讨论】:

    标签: javascript api ckeditor


    【解决方案1】:

    我发现这篇文章正在寻找答案......

    在这里查看答案中提供的链接 [http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-fire],向下滚动到 execCommand

    这对我有用,只需要您知道插件的名称,所以它总是可以工作的。显然,您可能需要将“可编辑”更改为您的编辑器实例。

    CKEDITOR.instances['editable'].execCommand('YOUR_PLUGIN_NAME_HERE');
    

    如果上述失败,HACK

    这会起作用(下面的第一行代码),但需要您查看源代码以找到正确的#。如果你有 1 个自定义插件,没什么大不了的。但是,如果您像我一样有十几个或更多,这很烦人,并且可能会随着添加更多插件而改变。

    CKEDITOR.tools.callFunction(145,this);
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      阅读: http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-fire

      editor.fire( 'MediaEmbed', data);
      

      我认为这是您的数据需要具有的结构:

      var data = {title : 'Embed Media',
                       minWidth : 550,
                       minHeight : 200,
                       contents :
                             [
                                {
                                   id : 'iframe',
                                   expand : true,
                                   elements :[{
                                      id : 'embedArea',
                                      type : 'textarea',
                                      label : 'Paste Embed Code Here',
                                      'autofocus':'autofocus',
                                      setup: function(element){
                                      },
                                      commit: function(element){
                                      }
                                    }]
                                }
                             ]}
      

      我不安全,但这会在途中为您提供帮助。 查看插件的源代码以找到可用的命令。 我上面指定的命令名称是您的插件唯一拥有的命令名称。

      编辑 - 手动插入

                      var div = editor.document.createElement('div');
                      div.setHtml("<embed src=" + url +" width=" + width +" height=" + height + ">");
                      editor.insertElement(div);
      

      你可以添加你喜欢的每一个属性,Type??可能吗?自动对焦??

      【讨论】:

      • 我试了,但是编辑器好像不能处理插件里面的功能!
      • 试试 CKEDITOR.instances["YourEditor"].fire('MediaEmbed');这至少应该触发对话框..
      • 我看过代码..而且很简单。创建嵌入标签的 HTML .. 并使用我在帖子的“编辑”部分中发布的代码。
      • 这是一个很好的捷径,但有一个问题:使用这个系统,你不能为我插入的代码创建一个假元素。这应该对 youtube 有好处,但假设我需要启动 FakeElement 插件来为一段代码创建一个占位符。这看起来不可能!!!
      • 我编辑了问题,我尝试使用 api。控制台没有错误,但什么也没发生!
      猜你喜欢
      • 2016-05-02
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多