Javascript Codemirror插件Tinymce内联模式IndexSizeError

Javascript Codemirror插件Tinymce内联模式IndexSizeError,javascript,tinymce,codemirror,tinymce-plugins,Javascript,Tinymce,Codemirror,Tinymce Plugins,我在contenteditable div上以内联模式使用tinymce 我以前使用过CodeMirror tinymce插件(不是内联模式),但它在内联模式下似乎不能正常工作。 我尝试过将配置更改为inline:false,它可以正常工作 单击源按钮打开带有CodeMirror的HTML,看起来还可以。 但是当我点击Ok保存它时,它在Chrome和Firefox中似乎运行良好,但在Safari中它添加了一个&x0并且我无法关闭模式(但是,我可以看到它已经更改了可编辑div的内容),再次单击确定

我在contenteditable div上以内联模式使用tinymce

我以前使用过CodeMirror tinymce插件(不是内联模式),但它在内联模式下似乎不能正常工作。 我尝试过将配置更改为
inline:false
,它可以正常工作

单击按钮打开带有CodeMirror的HTML,看起来还可以。 但是当我点击Ok保存它时,它在Chrome和Firefox中似乎运行良好,但在Safari中它添加了一个
&x0并且我无法关闭模式(但是,我可以看到它已经更改了可编辑div的内容),再次单击确定按钮,它会添加另一个
和控制台错误。单击“取消”或“X”按钮只会添加控制台错误

在控制台中,我得到
IndexSizeError:DOM异常1:索引或大小为负值,或大于允许的值
tinymce.min.js:5724

在Chrome中,它似乎可以工作,但我仍然收到一个控制台错误
给定范围不在文档中。

我的tinymce配置如下:

var tinymceEditText = tinymce.init({
        selector: '.editableEl',
        // target: ".editableElTinyMCE",
        // theme: 'inlite',
        inline: true,
        plugins: [
            'advlist autolink lists link image charmap anchor media',
            'searchreplace visualblocks code fullscreen',
            'template textcolor colorpicker hr fontawesome noneditable hr',
            'insertdatetime contextmenu paste save codemirror',
            'OBstock emoji_one'
        ],
        toolbar1: 'save undo redo | styleselect | bold italic underline | forecolor backcolor | alignleft aligncenter alignright alignjustify | | code',
        toolbar2: 'bullist numlist outdent indent | template | hr | anchor link unlink | image media OBstock emoji_one fontawesome ',
        relative_urls: false,
        remove_script_host: true,
        templates: "/admin/JS/tinymce/js/tinymce/lists/template_list.php",
        external_filemanager_path: "/filemanager/",
        external_plugins: {"filemanager": "/filemanager/plugin.min.js"},
        filemanager_title: "Uploaded Files", //the title of filemanager window default="Responsive filemanager",
        filemanager_sort_by: "name", //the element to sorting (values: name,size,extension,date) default="",
        filemanager_descending: 0, //descending ? or ascending (values=1 or 0) default="0"
        codemirror: {
            indentOnInit: true, // Whether or not to indent code on init.
            smartIndent: true,
            indentWithTabs: true,
            saveCursorPosition: false,
            path: '/admin/JS/codemirror-' + CODEMIRRORVERSION, // Path to CodeMirror distribution
            config: {           // CodeMirror config object
                theme: CODETHEME,
                indentUnit: 4,
                lineNumbers: true,
                mode: "htmlmixed",
                matchBrackets: true,
                autoCloseBrackets: true,
                autoCloseTags: true,
                matchTags: {bothTags: true},
                indentOnInit: true, // Whether or not to indent code on init.
                smartIndent: true,
                indentWithTabs: true,
                lineWrapping: true,
                paletteHints: false,
                lint: true,
                lintOnChange: true,
                showHint: true,
                HTMLHint: true,
                CSSHint: true,
                JSHint: true,
                getAnnotations: true,
                gutters: ['CodeMirror-lint-markers', 'CodeMirror-linenumbers', 'CodeMirror-foldgutter'],
                foldGutter: true,
                profile: 'xhtml', /* define Emmet output profile */
                extraKeys: {
                    "Ctrl-Space": "autocomplete",
                    "F11": function (cm) {
                        cm.setOption("fullScreen", !cm.getOption("fullScreen"));
                    },
                    "Esc": function (cm) {
                        if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
                    }
                }
            },
            jsFiles: [
                'mode/php/php.js',
                'mode/htmlembedded/htmlembedded.js',
                'addon/edit/matchbrackets.js',
                'addon/edit/closebrackets.js',
                'addon/edit/closetag.js',
                'addon/fold/xml-fold.js',
                'addon/fold/comment-fold.js',
                'addon/edit/matchtags.js',
                'mode/htmlmixed/htmlmixed.js',
                'addon/search/searchcursor.js',
                'addon/search/search.js',
                'addon/hint/show-hint.js',
                'addon/hint/anyword-hint.js',
                'addon/hint/html-hint.js',
                'addon/hint/css-hint.js',
                'addon/hint/xml-hint.js',
                'addon/hint/javascript-hint.js',
                'addon/lint/lint.js',
                'addon/lint/javascript-lint.js',
                'addon/lint/json-lint.js',
                'addon/lint/css-lint.js',
                'addon/lint/html-lint.js',
                'addon/customplugins/lint/csslint.js',
                'addon/customplugins/hint/htmlhint.js'
            ],
            cssFiles: [
                'theme/' + CODETHEME + '.css',
                'addon/dialog/dialog.css',
                'addon/hint/show-hint.css',
                'addon/lint/lint.css',
                'addon/fold/foldgutter.css',
            ]
        }
});
编辑:我现在已经在Chrome和Firefox中重新创建了它,方法是打开源代码编辑器,单击“取消”,再次打开源代码编辑器,然后单击“确定”。但控制台中存在不同的错误:

铬:
Uncaught DOMException:未能对“Range”执行“setStart”:偏移量3处没有子项。
tinymce.min.js:5

火狐:
IndexSizeError:Index或size为负数或大于允许的金额
tinymce.mins.js:5

最终我自己解决了这个问题

问题不在于CodeMirror本身,而在于tinymce的
setContent
功能

对此的修复方法是使用
insertContent
函数,并在tinymce.init中添加一个额外的设置

if(CMsettings.config.inlineFix) {
    editor.selection.select(editor.getBody(), true);
    editor.insertContent(codemirror.getValue().replace(cc, '<span id="CmCaReT"></span>'));
} else {
    editor.setContent(codemirror.getValue().replace(cc, '<span id="CmCaReT"></span>'));
}
if(CMsettings.config.inlineFix){
editor.selection.select(editor.getBody(),true);
editor.insertContent(codemirror.getValue().replace(cc.);
}否则{
setContent(codemirror.getValue().replace(cc.);
}
这使得insert按钮可以工作,但是cancel按钮在光标上仍然有一些奇怪的行为,所以我最终复制并修改了整个插件,以删除insert和cancel按钮,并将它们添加到html中