2012-03-28 2 views
2

Я использую CLEditor, http://premiumsoftware.net/cleditor/, для моего текстового редактора. Существует функция «вставить как текст», которая при нажатии кнопки появляется всплывающее окно с текстовым полем для вставки содержимого и стилей стираются.CLEditor, вставка содержимого как текстовая функциональность в главном окне

То, что я хотел бы сделать, это использовать эту же функциональность, но в любое время, когда кто-то вставляется в основное текстовое поле, это действие выполняется автоматически. Как я могу это вызвать?

Я создал JS скрипку http://jsfiddle.net/helpinspireme/naubS/, но не смог вставить все JS там так, чтобы ссылка на основной файл JS для CLEditor посетить их сайт: http://premiumsoftware.net/cleditor/

Спасибо за вашу помощь.

ответ

3

Я знаю, что я не отвечаю на ваш реальный вопрос, но в случае, если ваш проблема - это мусор, созданный пользователем, который пытается вставить текст из Microsoft Office (например, Word). Я бы рекомендовал рассмотреть альтернативу решение.

Сам CLEditor может переключаться между iFrame (режим расширенного текста) и текстовым полем (режим источника). Функциональность «Вставить как текст» использует текстовое поле, которое не поддерживает богатый текст, если он сам, поэтому он не позволит мусорному html в первую очередь.

Однако, если редактор находится в режиме расширенного текста, очень сложно предотвратить вставку пользователя из Word (он может использовать обычную кнопку вставки, нажать CTRL-V или даже использовать контекстное меню правой кнопки мыши, которое все разные события и трудно перехватывать с помощью javascript). Итак, теперь урон уже сделан; у вас есть грязный html внутри вашего редактора. Таким образом, вместо того, чтобы пытаться дезинфицировать мусор произведенный Словом, я реализовал следующую проверку (JavaScript) при сохранён вход:

if(clEditorValue && (clEditorValue.indexOf('<!--') !== -1 || clEditorValue.indexOf('mso-ansi-language') !== -1)) { 
    alert('Unable to process text pasted from Word, please use "Paste as text" or modify your input'); 
    return; 
} 

Я надеюсь, что этот ответ полезным для других людей, которые пытаются достичь того же.

0

При вставке в cleditor редактор извлекает весь html из источника. Я закончил редактирование jquery.cleditor.js и добавил функцию привязки к функции $ doc.click (hidePopups). Я использовал setTimeouts, чтобы текст заполнил вход и функцию updateTextArea для завершения.

.bind("paste", function() { 
      setTimeout(function() { 
       refreshButtons(editor); 
       updateTextArea(editor, true); 
       //remove any and all html from the paste action 
       setTimeout(function() { 
        //clean up the html with removeHtml function 
        $(editor.doc.body).html(removeHtml($(editor.doc.body).html())); 

        //change the input value with new clean string 
        $("#" + editor.$area[0].id).val($(editor.doc.body).html()); 
       }, 100); 
      }, 100); 
     }) 

Я использую функцию removeHtml ниже, чтобы удалить весь HTML из вставляемого содержимого.

//remove html altogether 
function removeHtml(str) { 
    var regex = /(<([^>]+)>)/ig; 
    var result = str.replace(regex, ""); 
    return result; 
} 

Это решение в настоящее время находится в разработке.

 Смежные вопросы

  • Нет связанных вопросов^_^