2010-08-19 12 views
2

Je veux supprimer toutes les balises html lors du collage dans tinymce editor. ce qui suit est le code qui n'est pas fonctionnel ... ce qui suit est les réglages tinymce ... le rappel paste_preprocess ne déclenche pas ... suis-je en manque d'option ..?paste_preprocess tinymce issue

tinyMCESettings = [ { 
     mode : "none,textareas", 
     height:heightEditor, 
     width:'100%', 
     plugins: "paste", 
     theme : "advanced", //skin : "wp_theme", 
     theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter", 
     relative_urls : "true", 
     paste_use_dialog : false, 
     paste_auto_cleanup_on_paste : false, 
     content_css: styleSheetToLoadForTinyMCE + "?" + new Date().getTime(), 
     force_p_newlines: false, 
     setup: function (ed) { 
      ed.onInit.add(
       function (ed, evt) { 
        //resizeFrame1(); 
        var a = tinyMCE.get(ed.id).getContent(); 
        if(a.indexOf("hcRestrictedMode", 0) > 0){ 
         ed.getDoc().designMode = "off"; 
         setTimeout(function(){ 
          tinyMCE.activeEditor.dom.setAttrib(tinyMCE.activeEditor.dom.select(".hcEditable"), 'contenteditable', 'true'); 
         }, 1000); 
        } 
       }); 
     }, 
     paste_preprocess : function(pl, o) { 
      // Content string containing the HTML from the clipboard 
      alert(o.content); 
      o.content = o.content.replace(/<.+?>/,""); 
     }, 
     paste_postprocess : function(pl, o) { 
      // Content DOM node containing the DOM structure of the clipboard 
      alert(o.content) 
      o.content = o.content.replace(/<.+?>/,""); 
     } 
    }]; 

aide ici ... thnx à l'avance ...

Répondre

3

Voici le code qui a résolu le problème.

paste_preprocess : function(pl, o) { 
      // Content string containing the HTML from the clipboard 
      var str = o.content; 
      var ta = document.createElement("textarea"); 
      ta.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;"); 
      o.content = CleanWordHTML(ta.value); 
}, 
paste_postprocess : function(pl, o) { 
}, 

CleanWordHTML (ta.value); est une fonction définie par l'utilisateur où les chaînes html sont extraites d'expressions régulières.

+0

Toute implémentation de référence de CleanWordHTML est-elle disponible? –

4

Voici le code de configuration:

paste_preprocess : function(pl, o) { 
    alert('pasteprocess startet'); 
    o.content = strip_tags(o.content,''); 
    //o.content = strip_tags(o.content,'<b><u><i><p><br><img>'); // use this i.e. to keep some tags 
    alert('pasteprocess ended - function strip_tags found and used'); 
}, 

est ici la fonction utilisée (prise de here)

function strip_tags (str, allowed_tags) { 
    // Strips HTML and PHP tags from a string 
    // 
    // version: 1006.1915 
    // discuss at: http://phpjs.org/functions/strip_tags // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Luke Godfrey 
    // +  input by: Pul 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Onno Marsman // +  input by: Alex 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Marc Palau 
    // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // +  input by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Eric Nagel 
    // +  input by: Bobby Drake 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + bugfixed by: Tomasz Wesolowski // *  example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>'); 
    // *  returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>' 
    // *  example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>'); 
    // *  returns 2: '<p>Kevin van Zonneveld</p>' 
    // *  example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>"); // *  returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>' 
    // *  example 4: strip_tags('1 < 5 5 > 1'); 
    // *  returns 4: '1 < 5 5 > 1' 
    var key = '', allowed = false; 
    var matches = []; var allowed_array = []; 
    var allowed_tag = ''; 
    var i = 0; 
    var k = ''; 
    var html = ''; 
    var replacer = function (search, replace, str) { 
     return str.split(search).join(replace); 
    }; 
    // Build allowes tags associative array 
    if (allowed_tags) { 
     allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi); 
    } 
    str += ''; 

    // Match tags 
    matches = str.match(/(<\/?[\S][^>]*>)/gi); 
    // Go through all HTML tags 
    for (key in matches) { 
     if (isNaN(key)) { 
      // IE7 Hack 
      continue;  } 

     // Save HTML tag 
     html = matches[key].toString(); 
     // Is tag not in allowed list? Remove from str! 
     allowed = false; 

     // Go through all allowed tags 
     for (k in allowed_array) {   // Init 
      allowed_tag = allowed_array[k]; 
      i = -1; 

      if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}   if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');} 
      if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag) ;} 

      // Determine 
      if (i == 0) {    allowed = true; 
       break; 
      } 
     } 
     if (!allowed) { 
      str = replacer(html, "", str); // Custom replace. No regexing 
     } 
    } 
    return str; 
} 

EDIT: défini paste_auto_cleanup_on_paste à vrai et cela va fonctionner (vérifié votre config dans mon système)

+0

thnx aloadz pour la réponse ... en fait l'expression rationnelle est OK ... est-ce que je manque quelque chose dans la configuration de tinymce car le rappel paste_preprocess ne se déclenche pas quand on colle quelque chose dans l'éditeur ...? –

+0

vous dites que le plugin de collage est activé, alors assurez-vous que la fonction est globalement appelable. – Thariama

+0

J'utilise la fonction de rappel paste_preprocess dans la fonction d'initialisation tinymce ... et la fonction dans laquelle cette initialisation réside est globalement appelable ... encore j'ai le problème ... checkout le lien .... http: // wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste –