Question

J'essaie de corriger un bogue dans un éditeur de texte enrichi que j'utilise, ce qui entraîne l'insertion de balises < Embed > sans leur balise de fermeture (ce qui visse complètement la sortie) . J'ai isolé le problème de cette opération:

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

Pas de code de fantaisie, juste l'affectation de innerHTML de Firefox. Vous devriez pouvoir dupliquer l’erreur dans Firebug comme ceci:

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

Existe-t-il une solution de contournement? J'ai besoin de la balise, mais je ne peux pas justifier de reconstruire / remplacer l'éditeur de texte enrichi complet à cause d'un cas d'extrême merde.

Je ne peux pas convertir cela en quelque chose comme document.createElement ('embed') , car les entrées réelles de cet éditeur peuvent facilement inclure quelques paragraphes de texte entourant . < intégrer > ; innerHTML est, sur le papier, parfait pour ce cas d'utilisation, je ne peux tout simplement pas le faire fonctionner avec un < embed > .

Était-ce utile?

La solution

Cela pourrait ne pas être une réponse à votre problème, mais < embed > ne faisait pas partie d'une version normalisée du code HTML jusqu'à HTML5, selon W3C .

Autres conseils

Bien que < incorporer > ne fait pas partie d'un code HTML standard, il a été largement implémenté et constitue donc un standard de facto.

Cela étant dit, j'utilise Firefox 3 (MineField v3.0.0.5) et je reçois un fonctionnement légèrement inattendu, mais tout à fait correct. Je m'attendais à ce que le code HTML exact soit placé dans l'élément que j'ai sélectionné, mais au lieu de cela, j'ai obtenu le code clean .

Comme < embed est une balise vide (c’est-à-dire qu’elle ne peut pas avoir de contenu mais uniquement des attributs), Firefox la retourne

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

dans

<embed  attribute="value"/>

, qui est une balise fermée parfaite. Il en va de même pour d’autres balises vides, telles que < input / > et < image &

Sur la cette page , vous pouvez le voir en action. La version sans script de la page contient une vidéo intégrée (youtube) à l'intérieur d'un div rose vif. Le script vole son contenu et le place dans le corps en tant que innerHTML.

Cela me rappelle les problèmes que document.write avait / avait avec < script / > Mots clés.

Mensonges. Ne répondez pas aux questions SO juste avant de vous coucher.

J'ai essayé ce qui suit dans Firebug

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

et a été attendu à apparaître lorsque j'ai vérifié la valeur de innerHTML. L'idée ici est de diviser la chaîne initiale en plusieurs chaînes concaténées. Stupide, mais une solution possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top