首页 > 解决方案 > TinyMCE 自动保存插件和 localStorage

问题描述

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

所以基本上,我想用一颗石头击中 2 只鸟。我想阻止 TinyMCE 将数据存储在 localStorage 中,如果我可以指定不同的“数据存储”,那么也许我可以将它指向我的 ajax 处理程序,该处理程序将持续到后端。

任何建议将不胜感激!

谢谢,
克里斯托夫

标签: tinymcetinymce-4

解决方案


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 行代码插入。


推荐阅读