2012-02-28 332 views
3

我正在使用tinymce编辑器提供丰富的文本格式,并且我想提供自动保存选项。我设法编写了一个完全符合这一点的脚本,但有一个问题。如果该窗口不是当前选项卡,我不想调用该保存功能,以避免不必要的保存调用。如何在使用TinyMCE编辑器时自动保存

过度使用$(window).focus()走到这一步我,但是这似乎并没有工作,因为当TinyMCE的编辑器处于焦点(意思是我打字),则它在某种程度上窗口超出对焦范围(最有可能是因为TinyMCE的编辑器使用iFrame),因此我的定期更新功能没有被调用。

我会很容易地解决这个问题,如果有一个处理程序。 onFocus为编辑,但似乎没有。任何人都可以建议我如何克服这个问题?下面

/* Function to be called for saving the blog */ 
function saveBlog(){ 

    var ed = tinymce.activeEditor; 
    /* Ajax call will be done only when some changes has been made in the editor*/ 
    if (ed.isDirty()) 
    { 
     ed.save(); 
     var link = $(this).attr("href"); 
     var cur_elem = $(this); 
     cur_elem.html('saving...'); 
     cur_elem.addClass('unclickable'); 

     $.ajax({ 
      type: "POST", 
      url: link, 
      data: $("#blog_form :input[name!='csrfmiddlewaretoken']").serialize(), 
      dataType: 'json', 
      success: function(){ 
       cur_elem.html('Save'); 
       cur_elem.removeClass('unclickable'); 
      } 
     }); 
    } 

}; 


var interval_id; 

/* Timer resumes when the window comes back in focus */ 
$(window).focus(function() { 
    if (!interval_id) 
     interval_id = setInterval(saveBlog, 5000); 
}); 

/* Whenever window goes out of focus the timer is cleared */ 
$(window).blur(function() { 
    clearInterval(interval_id); 
     interval_id = 0; 
}); 

/* Starts the auto saving for the first time */ 
$(document).ready(function(){ 
    interval_id = setInterval(saveBlog, 5000); 
}); 

我的代码被赋予任何人都可以帮助解决这个问题,我只需要知道什么时候TinyMCE的编辑器实例是重点,这样我就可以恢复自动保存周期函数。我可以补充说,除了$(window).focus

+0

当您下载TinyMCE时,实际上是包含在软件包中的自动保存插件 – Tom 2012-02-28 18:37:11

+0

该文档指出,如果用户未提交,自动保存插件仅向用户发出警告。并且ajax支持将在稍后添加http://www.tinymce.com/wiki.php/Plugin:autosave – Sachin 2012-02-29 11:19:31

+0

哦,你是对的。对不起,没有完全阅读^^ – Tom 2012-02-29 13:21:55

回答

1

您是否已尝试onActivate-处理程序?

+0

我没有尝试,但没有激活意味着第一次激活编辑器。像init一样?我会尝试一下仍然是 – Sachin 2012-02-29 11:17:54

+0

是和不是。如果你有一个单一的编辑器onActivate只会触发一次。如果你有几个tinymce编辑器激活,每次你将焦点转移到另一个编辑器时都会激活。另一个方法是运行间隔函数并检查document.activeElement。如果编辑器处于活动状态保存。 – Thariama 2012-02-29 11:20:51

+0

在这种情况下,我在页面上只有一个编辑器,但您所说的其他内容可能会起作用。但即使当我更改标签时,这个问题仍然存在,编辑器将处于活动状态,并且间隔函数将被不必要地调用? – Sachin 2012-02-29 11:28:26

2

虽然这篇文章比较陈旧,但我写了一个插件,它每隔x秒就发送一次表单数据到指定的url。我已经博文here

总之,这个想法是创建一个iframe,动态地改变表单的目标和动作,并提交表单来激发ajax效果。一旦保存,我将表单元素置于初始状态,这样如果用户想手动保存,他或她就不会有任何困难。

请注意,我写的插件是用于tinymce4的。对于旧版本,您必须稍微更改源代码。

相关问题