Pregunta

Estoy tratando de corregir un error en un editor de texto enriquecido que estoy usando, lo que hace que las etiquetas < embed > se inserten sin su etiqueta de cierre (lo que arruina la salida por completo) . He aislado el problema de esta operación:

// body is a <body> tag
body.innerHTML = '<embed src="http://example.com/whatever"></embed>';

Sin código sofisticado, solo la asignación innerHTML de Firefox. Debería poder duplicar el error en Firebug de esta manera:

>>> document.body.innerHTML = "<embed></embed>"
"<embed></embed>"
>>> document.body.innerHTML
"<embed>"

¿Hay alguna solución para esto? Necesito la etiqueta, pero no puedo justificar la reconstrucción / reemplazo de todo el editor de texto enriquecido debido a un caso de borde horrible.

No puedo convertir esto en algo como document.createElement ('embed') , porque la entrada del mundo real a este editor puede incluir fácilmente unos pocos párrafos de texto alrededor del < incrustar > ; innerHTML es, en papel, perfecto para este caso de uso, simplemente no puedo hacer que funcione con un < embed > .

¿Fue útil?

Solución

Esto podría no ser una respuesta a su problema, pero < embed > no formaba parte de ninguna versión estandarizada de HTML hasta HTML5, según W3C .

Otros consejos

Aunque < incrustar > no es parte de un html estándar, se ha implementado ampliamente y, por lo tanto, es un estándar de facto.

Dicho esto, estoy ejecutando Firefox 3 (MineField v3.0.0.5) y obtengo una funcionalidad ligeramente inesperada, pero totalmente correcta. Esperaba que el HTML exacto se pusiera en el elemento que seleccioné, pero en su lugar obtuve clean html.

Dado que < embed es una etiqueta vacía (es decir, no puede tener contenido, solo atributos), Firefox lo convierte

<embed attribute="value"></embed>

en

<embed  attribute="value"/>

, que es una etiqueta cerrada perfectamente válida. Hace lo mismo en otras etiquetas vacías, como < input / > y < image >

En la esta página puede ver esto en acción. La versión sin guión de la página tiene un video incrustado (youtube) dentro de un div rosa brillante. El script roba su contenido y lo coloca en el cuerpo como innerHTML.

Esto me recuerda los problemas que document.write tenía / tiene con < script / > Etiquetas

Mentiras. No responda preguntas SO justo antes de acostarse.

Intenté lo siguiente en Firebug

//break up initial embed into single chunks
document.body.innerHTML = "<e"+"mbe"+"d></embed>" 

y obtuve el resultado esperado cuando verifiqué el valor de innerHTML. La idea aquí es dividir la cadena inicial en múltiples cadenas concatenadas. Estúpido, pero una posible solución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top