2012-08-02 23 views
7

Estoy usando el editor wysihtml5 wysiwyg.wysihtml5. imagen src y href están deshabilitadas

El problema es que el atributo src de imagen y el atributo href de enlace se eliminan de html. En el servidor ya estoy siendo eliminado html.

¿Cómo puedo solucionar este problema?

Estoy usando advanced.js rulest. Con todas las reglas

Editor

ACTUALIZACIÓN 1

Bueno editor.getValue y jquery().val() for textarea dan mismos valores en el formulario de envío. significa que la forma debe enviarse correctamente.

Pero he visto la solicitud POST que se envía desde el navegador. y no tiene URL. Algo mal.

ACTUALIZACIÓN 2

Si quito del conjunto de reglas todo lo relacionado con IMG, sin embargo, es que funciona inproperly.

ACTUALIZACIÓN 3

En respuesta a Marrowmaw comentario.

Estoy esperando:

<a href="http://domain.com/" title="Link: http://domain.com">Link</a> 

Pero consigo

<a href="" title="Link: Null">Link</a> 

ACTUALIZACIÓN 4

<div id="wysihtml5-toolbar" style="display: none;"> 
     <button class="btn" data-wysihtml5-command="bold"> 
     {{ "Bold"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="italic"> 
     {{ "Italic"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="createLink"> 
     {{ "Link"|trans }}/{{ "Unlink"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="insertUnorderedList"> 
     * 
     </button> 
     <button class="btn" data-wysihtml5-command="insertOrderedList"> 
     1,2,3 
     </button> 
     <button class="btn" data-wysihtml5-command="formatBlock" data-wysihtml5-command-value="h1"> 
     {{ "Heading"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="insertImage"> 
     {{ "Image"|trans }} 
     </button> 

     <div data-wysihtml5-dialog="createLink" style="display: none;"> 
      <label> 
      {{ "Link"|trans }}: 
      <input data-wysihtml5-dialog-field="href" value="http://"> 
      </label> 
      <a data-wysihtml5-dialog-action="save">{{ "Save"|trans }}</a>&nbsp;<a data-wysihtml5-dialog-action="cancel">{{ "Cancel"|trans }}</a> 
     </div> 
      <!-- Dialog --> 
     <div data-wysihtml5-dialog="insertImage" style="display: none;"> 
      <label> 
      URL: <input data-wysihtml5-dialog-field="src" value="http://"> 
      </label> 
      <label> 
      Alternative text: <input data-wysihtml5-dialog-field="alt" value=""> 
      </label> 
      <label> 
       {{ "Align"|trans }}: 
       <select data-wysihtml5-dialog-field="className"> 
        <option value="">{{ "default"|trans }}</option> 
        <option value="wysiwyg-float-left">{{ "left"|trans }}</option> 
        <option value="wysiwyg-float-right">{{ "right"|trans }}</option> 
       </select> 
      </label> 
      <a data-wysihtml5-dialog-action="save">{{ "Save"|trans }}</a>&nbsp;<a data-wysihtml5-dialog-action="cancel">{{ "Cancel"|trans }}</a> 
     </div> 
     </div> 
     <form action="{{ path('###_save_homepage') }}" method="POST" > 
     <textarea id="wysihtml5-textarea" placeholder="{{ "Enter your text"|trans }}..." autofocus name="homepage" style="width:700px;height:400px;">   
      {{ homepage|raw }}   
     </textarea> 
     <input type="submit" value="{{ "Save"|trans }}" class="btn" /> 
    </form> 

y JS init:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    var editor = new wysihtml5.Editor("wysihtml5-textarea", { // id of textarea element 
      toolbar:  "wysihtml5-toolbar", // id of toolbar element 
      parserRules: wysihtml5ParserRules // defined in parser rules set 
     });  

    }); 

</script> 
+0

i'v publicación actualizada con detalles –

+0

¿El html se quita antes de que se envíe al servidor, o se elimina en algún lugar entre el cliente y el servidor? Si es el último, entonces podrías escapar del html antes de enviarlo y volver a abrirlo en el otro extremo. – starbeamrainbowlabs

+0

Parece que en algún lugar entre%) –

Respuesta

16

Intente echar un vistazo al archivo wysihtml5-x.x.x.js al que hace referencia.

Decidieron que solo permitirían URL absolutas (en nombre de protección contra XSS). El código a continuación esencialmente le permite tomar cualquier valor si se siente cómodo con esa compensación.

Ctrl-F para "attributeCheckMethods var" y realizar los siguientes cambios - source:

var attributeCheckMethods = { 
url: (function() { 
    /*var REG_EXP = /^https?:\/\//i;*/ 
    return function(attributeValue) { 
    /*if (!attributeValue || !attributeValue.match(REG_EXP)) { 
     return null;*/ 
    if (!attributeValue) { 
     return ""; 
    } 
    /*return attributeValue.replace(REG_EXP, function(match) { 
     return match.toLowerCase(); 
    });*/ 

    var parser = document.createElement('a'); 
    parser.href = attributeValue; 

    if ( parser.protocol == 'http:' 
     || parser.protocol == 'https:' 
     || parser.protocol == 'ftp:' 
    ) return attributeValue; 
    }; 
})(), 
1

La forma en que el margen de beneficio es wysihtml5 valida de forma explícita estricta. Si el URL o SRC no valida, se omitirá.

Examinaré el archivo parser_rules/advanced.js. Puede eliminar, modificar y editar las reglas que validan cada etiqueta.

Cuestiones relacionadas