Domanda

Sto cercando di correggere un bug in un editor di testi avanzato che sto usando, che causa l'inserimento dei tag < embed > senza il loro tag di chiusura (che rovina completamente l'output) . Ho isolato il problema con questa operazione:

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

Nessun codice elaborato, solo l'assegnazione innerHTML di Firefox. Dovresti essere in grado di duplicare l'errore in Firebug in questo modo:

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

Esiste una soluzione alternativa per questo? Ho bisogno del tag, ma non posso giustificare la ricostruzione / la sostituzione dell'intero rich text editor a causa di un caso merdoso.

Non posso convertirlo in qualcosa come document.createElement ('embed') , perché l'input del mondo reale a questo editor può facilmente includere alcuni paragrafi di testo racchiusi nel < embed > ; innerHTML è, su carta, perfetto per questo caso d'uso, non riesco proprio a farlo funzionare con un < embed > .

È stato utile?

Soluzione

Questa potrebbe non essere una risposta al tuo problema, ma < embed > non faceva parte di alcuna versione standardizzata di HTML fino a HTML5, secondo W3C .

Altri suggerimenti

Anche se < embed > non fa parte di un html standard, è stato ampiamente implementato ed è quindi uno standard di fatto.

Detto questo, sto eseguendo Firefox 3 (MineField v3.0.0.5) e sto diventando leggermente inaspettato, ma completamente funzionante. Mi aspettavo che l'HTML esatto fosse inserito nell'elemento selezionato, ma invece ho ottenuto clean html.

Poiché < embed è un tag vuoto (ovvero non può avere contenuti, solo attributi), Firefox trasforma questo

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

in

<embed  attribute="value"/>

, che è un tag chiuso perfettamente valido. Fa lo stesso su altri tag vuoti, come < input / > e < image >

Alla questa pagina puoi vederlo in azione. La versione senza script della pagina ha un video incorporato (youtube) all'interno di un div rosa brillante. La sceneggiatura ruba i suoi contenuti e li inserisce nel corpo come innerHTML.

Questo mi ricorda i problemi che document.write aveva / ha con < script / > tag.

bugie. Non rispondere alle domande SO prima di andare a letto.

Ho provato quanto segue in Firebug

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

e mi sono aspettato che comparisse quando ho verificato il valore di innerHTML. L'idea qui è quella di spezzare la stringa iniziale in più stringhe concatenate. Stupido, ma un possibile rimedio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top