Вопрос

Я пытаюсь исправить ошибку в используемом мной редакторе форматированного текста, из-за которой возникает <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>;На бумаге внутренний HTML идеально подходит для этого варианта использования, но я просто не могу заставить его работать с <embed>.

Это было полезно?

Решение

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

Другие советы

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

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

Поскольку < embed является пустым тегом (то есть он не может иметь содержимого, только атрибуты), Firefox превращает это

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

в

<embed  attribute="value"/>

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top