TinyMCE自动保存插件和localStorage

时间:2019-07-12 14:15:04

标签: tinymce tinymce-4

默认情况下,TinyMCE的自动保存插件将编辑器的文本存储在localStorage中。有没有办法告诉它使用其他存储引擎?最终,我想做的是在storeDraft事件上设置一个侦听器,这样我就可以将内容持久保存到我们的服务器,以便即使超过了autosave_retention限制,用户也可以访问内容。我知道我可以将autosave_rentention设置为0,但是即使我这样做,我仍然可以看到它仍然将数据写入localStorage -只是将其删除(尽管有时不是立即,而且似乎页面重新加载时出现短路,在某些情况下情况)。

因此,基本上,我想用一块石头打两只鸟。我想停止TinyMCE将数据存储在localStorage中,如果可以指定其他“数据存储”,那么也许可以将其指向我的ajax处理程序,该处理程序将一直保留到后端。

任何建议将不胜感激!

thnx,
克里斯托夫

1 个答案:

答案 0 :(得分:1)

autosave插件旨在与本地存储一起使用,并且没有选择更改为其他存储机制的选项。如果要将数据存储在服务器上,通常可以使用一些自定义代码,这些代码使用(a)TinyMCE事件或(b)计时器来获取编辑器的当前内容,然后将其发送到服务器。

如果您想使用TinyMCE事件(https://www.tiny.cloud/docs/advanced/events/#editorevents)来触发此过程,则可以使用以下代码:

tinymce.init({
    selector: "textarea",
    ...
    setup: function (editor) {
      editor.on('init change NodeChange Dirty', function (e) {
        // 1. use getContent() to extract the editor's current HTML 
        // 2. send the HTML to your server
      });
    }
});

如果您想使用基本计时器(例如setTimeout()),则可以使用它触发与上面的示例代码相同的两个操作。

从理论上讲,您可以修改autosave插件以将数据发送到服务器,而不是将数据存储在本地存储中,但是我认为您可以以一种非常简单的方式来完成所需的工作,而无需深入研究现有插件中约有200行代码。