上传图片:无法读取undefined的属性'setCustomData'

时间:2017-06-03 07:28:42

标签: ckeditor ckeditor4.x

我正在尝试将上传的图片嵌入到编辑器中。我的filebrowserUploadUrl/api/m/image,似乎工作正常。单击Send it to the Server按钮后,出现以下脚本错误:

image.js?t=H4PG:19 Uncaught TypeError: Cannot read property 'setCustomData' 
of undefined
  at textInput.onChange (image.js?t=H4PG:19)
  at textInput.n (ckeditor.js:10)
  at textInput.CKEDITOR.event.CKEDITOR.event.fire (ckeditor.js:12)
  at textInput.setValue (ckeditor.js:619)
  at textInput.setValue (ckeditor.js:545)
  at a.q (ckeditor.js:841)
  at ckeditor.js:31
  at Object.callFunction (ckeditor.js:31)
  at image?CKEditor=editor&CKEditorFuncNum=1&langCode=en:1

上面的最后一行是对filebrowserUploadUrl的调用,其响应是:

  window.parent.CKEDITOR.tools.callFunction(1,'/ images / bulletins.jpg','Uploaded successfully');

Uploaded successfully消息显示在警报中。 Image Info选项卡下的预览框未更新。但是,如果我单击“确定”关闭对话框,图像(bulletins.jpg)就会嵌入到编辑器中。

可能导致错误的原因是什么?如何解决?

我找到了导致它的原因。我想在插入图像对话框启动到“上载”选项卡时设置默认选项卡。我使用以下代码:

CKEDITOR.on("dialogDefinition", function(ev) {
  var dialogName = ev.data.name;
  var dialogDefinition = ev.data.definition;
  if (dialogName === "image") {
    dialogDefinition.onShow = function() {
      this.selectPage("Upload");
    }
  }
});

使用上述代码时,上传文件时会发生错误。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,在使用vikram提出的解决方案后,编辑器在将图像链接粘贴到文本时产生错误。这里更好的方法,不是完全覆盖默认的onShow方法,而是通过以下方式添加更多:

CKEDITOR.on('dialogDefinition', function (ev) {
    var dialogName = ev.data.name;
    var dialogDefinition = ev.data.definition;

    if (dialogName == 'image') {

        var oldOnShow = dialogDefinition.onShow;
        var newOnShow = function () {
            this.selectPage('Upload');
            this.hidePage('Link');

            // change tabs order
            $('a[title=Upload].cke_dialog_tab').css('float', 'left');
        };

        dialogDefinition.onShow = function () {
            oldOnShow.call(this, arguments);
            newOnShow.call(this, arguments);
        };
    }
});

答案 1 :(得分:0)

经过多次调试后,我找到了解决方案。

如果您在image.js中看到onChange textBox的txtUrl方法 见第507和513行 你会明白这个错误的原因。

在第513行setCustomData被调用。

  

original.setCustomData('isReady','false');

CKEDITOR.on("dialogDefinition", function(ev) {
  var dialogName = ev.data.name;

  //current editor
  var editor = ev.editor;
  var dialogDefinition = ev.data.definition;

  if (dialogName === "image") {
    dialogDefinition.dialog.on('show', function(e){
      var dialogBox = e.sender;

        //This line is the answer of your question
       //this line will get rid of the error setCustomData
      dialogBox.originalElement = editor.getSelection().getStartElement();
      this.selectPage("Upload");
    });
  }
});