javascript - una - ¿Cómo puedo evitar que TinyMCE agregue CDATA a las etiquetas<script> y comentar las etiquetas<style>?
etiqueta style (5)
Para mí, funcionó para eliminar el siguiente código para deshabilitar el formato de etiquetas de script:
,o.length>0&&(i.firstChild.value="// <![CDATA[/n"+n(o)+"/n// ]]>")
Y para formar en la etiqueta de estilo, debe eliminar:
&&(i.firstChild.value="<!--/n"+n(o)+"/n-->")
Dejemos de lado los problemas de permitir contenido <script>
dentro de un editor web; Soy perfectamente consciente de ellos.
Lo que quiero es permitir que los elementos <style>
y <script>
dentro del contenido del texto, el problema es que, siempre que hago esto, TinyMCE los cambia a:
<style><!-- th{width:80px} --></style>
y el contenido del script se cambia a:
<script>// <![CDATA[
$.address.unbind();
// ]]></script>
En mi configuración de inicio TinyMCE, tengo:
valid_elements : "*[*]",
extended_valid_elements : "*[*],script[charset|defer|language|src|type],style",
custom_elements: "*[*],script[charset|defer|language|src|type],style",
valid_children : "+body[style],+body[script]",
verify_html : false,
media_strict: false
Pero parece que no puedo encontrar una manera de evitar que TinyMCE deshabilite los elementos <style>
y <script>
.
Puedes intentar alterar el tinymce.min.js
,f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/(<!--/[CDATA/[|/]/]-->)/g,"/n").replace(/^[/r/n]*|[/r/n]*$/g,"").replace(/^/s*((<!--)?(/s*////)?/s*<!/[CDATA/[|(<!--/s*)?///*/s*<!/[CDATA/[/s*/*//|(////)?/s*<!--|///*/s*<!--/s*/*//)/s*[/r/n]*/gi,"").replace(//s*(///*/s*/]/]>/s*/*//(-->)?|/s*/////s*/]/]>(-->)?|/////s*(-->)?|/]/]>|///*/s*-->/s*/*//|/s*-->/s*)/s*$/g,"")}for(var r=e.length,i,o,a;r--;)i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t?(a=i.attr("type"),a&&i.attr("type","mce-no/type"==a?null:a.replace(/^mce/-/,"")),o.length>0&&(i.firstChild.value="// <![CDATA[/n"+n(o)+"/n// ]]>")):o.length>0&&(i.firstChild.value="<!--/n"+n(o)+"/n-->")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^/[CDATA/[|/]/]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))})
Por favor, busque y elimine la línea de código anterior del archivo.
Puedes intentar usar <
en lugar de <
para las etiquetas de estilo y script. De esta manera, Tinymce no reconocerá etiquetas de estilo y script.
Por ejemplo:
Para el estilo:
<style>th{width:80px}</style>
Para el guión:
<script>
$.address.unbind();
</script>
Recomendaría evitar cualquier personalización directa a las bibliotecas de terceros si se puede evitar. En su lugar, agregué un filtro de nodo personalizado al serializador de editores durante la inicialización, agregando lo siguiente al objeto de configuración pasado en la llamada de construcción de tinymce:
init_instance_callback : function(editor) {
// jw: this code is heavily borrowed from tinymce.jquery.js:12231 but modified so that it will
// just remove the escaping and not add it back.
editor.serializer.addNodeFilter(''script,style'', function(nodes, name) {
var i = nodes.length, node, value, type;
function trim(value) {
/*jshint maxlen:255 */
/*eslint max-len:0 */
return value.replace(/(<!--/[CDATA/[|/]/]-->)/g, ''/n'')
.replace(/^[/r/n]*|[/r/n]*$/g, '''')
.replace(/^/s*((<!--)?(/s*////)?/s*<!/[CDATA/[|(<!--/s*)?///*/s*<!/[CDATA/[/s*/*//|(////)?/s*<!--|///*/s*<!--/s*/*//)/s*[/r/n]*/gi, '''')
.replace(//s*(///*/s*/]/]>/s*/*//(-->)?|/s*/////s*/]/]>(-->)?|/////s*(-->)?|/]/]>|///*/s*-->/s*/*//|/s*-->/s*)/s*$/g, '''');
}
while (i--) {
node = nodes[i];
value = node.firstChild ? node.firstChild.value : '''';
if (value.length > 0) {
node.firstChild.value = trim(value);
}
}
});
}
Esperemos que esto ayude a otros atrapados en el mismo barco.
cuando almacene contenido de Tinymce, simplemente elimine estas etiquetas de salida similar a esto:
$tinyOutput = str_replace(array("// <![CDATA[", "// ]]>"), array("", ""), $_POST[''tinyOutput'']);
..then guardar en db ..