O que há com innerHTML e
-
22-07-2019 - |
Pergunta
Eu estou tentando corrigir um bug em um editor de texto rico que estou usando, o que faz com etiquetas <embed>
a ser inserido sem a sua marca de fechamento (que parafusos a saída completamente). Eu isolei o problema para esta operação:
// body is a <body> tag
body.innerHTML = '<embed src="http://example.com/whatever"></embed>';
código de fantasia Não, apenas atribuição innerHTML
do Firefox. Você deve ser capaz de duplicar o erro no Firebug assim:
>>> document.body.innerHTML = "<embed></embed>"
"<embed></embed>"
>>> document.body.innerHTML
"<embed>"
Existe uma solução para isso? Eu preciso da tag, mas eu não pode justificar a reconstrução / substituir todo o editor de texto rico por causa de um caso extremo de baixa qualidade.
Eu não posso converter isso em algo como document.createElement('embed')
, porque a entrada do mundo real para este editor pode facilmente incluir alguns parágrafos de texto envolvida em torno do <embed>
; innerHTML é, no papel, perfeito para este caso de uso, eu não posso obtê-lo para trabalhar com um <embed>
.
Solução
Isto pode não ser uma resposta para o seu problema, mas não era parte de qualquer versão padronizada de HTML até HTML5, de acordo com W3C .
Outras dicas
Apesar de
Dito isso, eu estou correndo Firefox 3 (campo minado v3.0.0.5) e estou recebendo funcionalidade ligeiramente inesperado, mas totalmente correta. Eu estava esperando o exata ??em> HTML para ser colocado no elemento I selecionado, mas em vez disso eu tenho clean html.
Desde
Isto lembra-me dos problemas document.write teve / tem com tags.
mentiras. Não responda SO perguntas antes de dormir direito.
Eu tentei o seguinte em Firebug
//break up initial embed into single chunks
document.body.innerHTML = "<e"+"mbe"+"d></embed>"
e conseguimos o esperado para aparecer quando eu verifiquei o valor de innerHTML. A idéia aqui é para quebrar a seqüência inicial em várias cadeias concatenadas. Estúpido, mas uma possível solução alternativa.