Как автоматически сохранить при использовании редактора TinyMCE - PullRequest
3 голосов
/ 28 февраля 2012

Я использую редактор 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

Ответы [ 2 ]

2 голосов
/ 02 мая 2013

Хотя этот пост довольно старый, я написал плагин, который отправляет данные формы на указанный URL каждые x секунд.Я написал в блоге это здесь .

Короче говоря, идея состоит в том, чтобы создать iframe, изменить цель и действие формы динамически, и отправить форму, чтобы стимулировать эффект ajax.После сохранения я помещаю элемент формы в исходное состояние, чтобы, если пользователь захочет сохранить вручную, у него не возникнет никаких трудностей.

Обратите внимание, что написанный мной плагин предназначен для tinymce4.Вам придется немного изменить исходный код для более старых версий.

1 голос
/ 29 февраля 2012

Вы уже пробовали обработчик onActivate?

...