javascript - onShow 事件后替换 CKEditor 对话框中的元素

标签 javascript html dialog ckeditor codemirror

我尝试为 CKEditor 编写一个自己的插件。目标是单击工具栏中打开对话框的按钮。在对话框中有一个 textArea 元素,应该用 CodeMirror 实例替换。

到目前为止,对话框已打开,我可以获取 textArea 并替换它。但它看起来很糟糕,没有任何功能。此外,控制台中没有错误。

我不明白为什么那行不通。

plugin.js 在点击我的插件按钮时启动

CKEDITOR.plugins.add( 'abbr', {
    icons: 'abbr',
    init: function( editor ) {
        editor.addCommand( 'abbr',new CKEDITOR.dialogCommand( 'abbrDialog' ) );

        // Create a toolbar button that executes the plugin command. 
        editor.ui.addButton( 'Abbr', {
            label: 'Insert SourceCode',
            command: 'abbr',
            toolbar: 'insert'
        } );

        CKEDITOR.dialog.add( 'abbrDialog', function ( editor ) {
            return {
                title : 'Insert SourceCode',
                minWidth : 700,
                minHeight : 300,
                contents : [{
                        id : 'tab1',
                        label : 'label1',
                        elements :
                        [{
                            type : 'html',
                            html: '<textarea id="codeEditor"></textarea>',
                            id : 'codeEditor',
                            label : 'CodeEditor',
                        }]
                }],
                onShow : replacaByCodeMirror,
                onOk : saveActionFunc
            };
        });
    }
});

function replacaByCodeMirror() {
    var codeEditor = CodeMirror.fromTextArea(document.getElementById("codeEditor"), {
        mode : "mixedMode",
        theme : "default"
    });
}

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <script src="../ckeditor.js"></script>
        <script src="../plugins/codemirror/js/codemirror.js"></script></script>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>

        <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css"/>
        <link rel="stylesheet" href="../plugins/codemirror/css/codemirror.css"/>
        <link rel="stylesheet" href="../plugins/codemirror/css/myStyle.css">
    </head>
    <body>
        <form>
            <textarea name="editor1" id="editor1" rows="10" cols="80">
                StartWort
            </textarea>
            <script>

                var editor = CKEDITOR.replace( 'editor1' );

            </script>
        </form>
    </body>
</html>

截图:Dialog Screenshot

最佳答案

您不能在 ckeditor 窗口内(或 ckeditor 对话框内)运行 javascript 代码。解决方法是在对话框内使用 iframe(您必须添加一个 iframedialog 插件)。

关于javascript - onShow 事件后替换 CKEditor 对话框中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180345/

相关文章:

javascript - Angular2 JQuery,如何制作document.ready函数

javascript - 使用 jquery 或 javascript 在悬停图像时更改 href 属性

javascript 行为 - 函数表达式与函数声明 - 区别

javascript - 在事件处理程序中获取表单元素

html - IE8 的 Css 问题 - 标题中 2 个 div 之间出现奇怪的空间

java - 如何编辑数据表的行(JAVA + Primefaces + JSF + MYSQL)

javascript - 个性化的javascript对话框?

鞭尾/对话框菜单项中的 bash 空格

javascript - 将后端快速 session 变量传递给 Angular

javascript - node crypto和crypto-js加解密的兼容性