Я пытаюсь исправить ошибку в используемом мною редакторе форматированного текста, из-за которой теги <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>.
mfn - обертывание <embed> в <object> сделало его вообще не отображаемым в Google Chrome, но (как ни странно) оборачивания его в <p> было достаточно, чтобы исправить проблемы с отображением в программах для чтения RSS. Если вы опубликуете это как ответ, я дам вам кредит.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, это не ответ на вашу проблему, но, согласно W3C, <embed> не был частью какой-либо стандартизированной версии HTML до HTML5.
Совершенно верно, так что +1. Но, к сожалению, люди его используют, и это источник неприятной ошибки, которая в определенных обстоятельствах отключает весь контент после незакрытого <embed>. ;)
Это уже не совсем правда; <embed> был добавлен в спецификацию HTML5. dev.w3.org/html5/spec/Overview.html#the-embed-element
Хотя <embed> не является частью стандартного HTML, он получил широкое распространение и, следовательно, является стандартом де-факто.
Тем не менее, я запускаю Firefox 3 (MineField v3.0.0.5) и получаю несколько неожиданную, но в целом правильную функциональность. Я ожидал, что HTML-код точный будет помещен в выбранный мной элемент, но вместо этого я получил 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. Идея здесь состоит в том, чтобы разбить исходную строку на несколько сцепленных строк. Глупо, но возможный обходной путь.
Проблема, о которой вы говорите, заключается в том, что теги сценария не могут содержать никаких тегов и что синтаксический анализатор видит начало конечного тега: «</». Если вы использовали формат «<element> <\ / element>» в своем документе.write, это сработало.
Насколько я понимаю, перед присваиванием это просто оценивается как "<embed> </embed>", то же самое, что не удается. Я также пробовал такие вещи, как innerHTML + = "</embed>". Попытка разбить назначение на несколько строк (например, innerHTML += "</embe") просто вызывает ошибки.
Странно, извините за это. Думал пройти кучу тестов, но сейчас не работает. Я уволен.
Но ты дал мне проверить еще одну идею. Это всегда хорошо. Мы всегда можем добавить запрос функции в стиле «Mail Goggles». ТАК: Решите некоторые задачи добавления / программирования менее чем за 60 секунд, чтобы опубликовать! ;)
Будет ли у вас работать, если вы создадите <object><embed> </object>? Будет ли он по-прежнему мешать вашему контенту?