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>.

Foi útil?

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 não é parte de um padrão HTML, tem sido amplamente implementado e é, portanto, um de-facto padrão.

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 HTML para ser colocado no elemento I selecionado, mas em vez disso eu tenho clean html.

Desde

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

para

<embed  attribute="value"/>

, que é uma tag fechada prefectly válido. Ele faz o mesmo em outras tags vazias, como e

Na desta página você pode ver isso em ação. A versão scriptless da página tem um dentro vídeo incorporado (youtube) de uma div rosa brilhante. O script rouba o seu conteúdo e coloca no corpo como innerHTML.

Isto lembra-me dos problemas document.write teve / tem com

scroll top