执行 setContent 时 TinyMce 失败

TinyMce fail while executing setContent

我正在尝试使用 tinymce 4.7.1(从我的旧版 tinymce 4.3.1 升级而来)。当我尝试通过调用方法 setContent 以编程方式设置 tinymce 的内容时,它抛出以下错误:

Cannot read property 'parse' of undefined TypeError: Cannot read property 'parse' of undefined

在查看错误的详细信息后,我意识到 tinymce 期望在它的 tinymce.dom 中序列化 class 并且在没有这个 class 的情况下它无法解析这个错误。

这是来自 tinymce 的片段

else {
          // Parse and serialize the html
          if (args.format !== 'raw') {
            content = new Serializer({
              validate: self.validate
            }, self.schema).serialize(
              self.parser.parse(content, { isRootContent: true }) //this line is throwing error
              );
          }

与以前的版本(对我来说很好用,版本 4.3.1)相比,对序列化 class 没有这种依赖。

有人可以建议我是否必须添加更多插件或 classes(默认包中未提供)以使我的代码正常工作吗?

我的观察:在一个孤立的原型示例中,当我 运行 tinymce 托管在云上时它运行良好。

您能否展示一些 运行 代码来说明您如何使用 setContent()?我怀疑您正试图在编辑器完全初始化之前调用它,因为 init() 方法是异步的。

确保等待编辑器完全初始化的最简单方法是依赖编辑器提供的 init 事件:

tinymce.init({
  selector: '#myTextarea',
  ...
  ...
  setup: function (editor) {
    editor.on('init', function () {
      editor.setContent('Using the on init stuff!');
    });
  }
});

根据@Michael 提供的建议,我部分解决了这个问题。所以就我而言,有两个问题。

  1. 即使我升级了 tinymce 以使用最新的插件和 js 文件,我仍然指的是旧版本的 themes.min.js(这是因为我正在维护 tinymce 的两个不同版本,以便我可以推出这个版本先逐个升级到有限的页面)与新版本不兼容。这导致 tinymce 编辑器的初始化不一致。一旦我修复了主题文件的来源,它就正确地初始化了编辑器
  2. 在某些情况下,我的 tinymce 编辑器没有正确加载,我试图执行 setContent 方法来设置导致错误的内容(正如@Michael 指出的那样)。因此,我将 setContent 调用移至运行良好的对象中公开的设置方法。