Что случилось с innerHTML и <embed>? - PullRequest
1 голос
/ 13 января 2009

Я пытаюсь исправить ошибку в используемом текстовом редакторе, из-за которого теги <embed> вставляются без закрывающего тега (что приводит к полному выходу из строя). Я выделил проблему для этой операции:

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

Никакого причудливого кода, только назначение Firefox innerHTML. Вы должны быть в состоянии продублировать ошибку в Firebug следующим образом:

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

Есть ли обходной путь для этого? Мне нужен тег, но я не могу оправдать перестройку / замену всего текстового редактора из-за одного дерьмового случая.

Я не могу преобразовать это во что-то вроде document.createElement('embed'), потому что реальный ввод в этот редактор может легко включать несколько абзацев текста, обернутых вокруг <embed>; innerHTML, на бумаге, идеально подходит для этого случая использования, я просто не могу заставить его работать с <embed>.

Ответы [ 3 ]

6 голосов
/ 13 января 2009

Возможно, это не ответ на вашу проблему, но не входил ни в одну стандартизированную версию HTML до HTML5, согласно W3C .

1 голос
/ 13 января 2009

Это напоминает мне о проблемах, с которыми у document.write были теги .

Ложь. Не отвечайте на ТАКИЕ вопросы прямо перед сном.

Я попробовал следующее в Firebug

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

и получил ожидаемый результат при проверке значения innerHTML. Идея состоит в том, чтобы разбить исходную строку на несколько объединенных строк. Глупо, но возможен обходной путь.

1 голос
/ 13 января 2009

Хотя не является частью стандартного html, он широко применяется и поэтому является стандартом де-факто.

Тем не менее, я использую Firefox 3 (MineField v3.0.0.5) и получаю немного неожиданную, но в целом правильную функциональность. Я ожидал, что точный HTML будет вставлен в выбранный элемент, но вместо этого я получил clean html.

Так как

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

в

<embed  attribute="value"/>

, который является правильно действующим закрытым тегом. Он делает то же самое для других пустых тегов, таких как и

На этой странице вы можете увидеть это в действии. Версия страницы без сценария имеет встроенное видео (YouTube) внутри ярко-розового div. Скрипт крадет его содержимое и помещает его в тело как innerHTML.

...