我正在尝试修复我正在使用的富文本编辑器中的错误,导致插入<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>
。
答案 0 :(得分:6)
这可能不是您的问题的答案,但根据W3C,&lt; embed&gt; 不是HTML5的任何标准化版本的一部分。
答案 1 :(得分:1)
尽管&lt; embed&gt;它不是标准html的一部分,它已被广泛实施,因此是事实上的标准。
那就是说,我正在运行Firefox 3(MineField v3.0.0.5)并且稍微出乎意料,但功能完全正确。我期待将完全 HTML放入我选择的元素中,但我得到 clean html。
由于&lt; embed是一个空标记(也就是说,它不能包含内容,只有属性),因此Firefox会将其转换为
<embed attribute="value"></embed>
进入
<embed attribute="value"/>
,这是一个完美有效的封闭标签。它在其他空标记上也是如此,例如&lt; input /&gt;和&lt; image&gt;
在this page,您可以看到这一点。该页面的无脚本版本在一个明亮的粉红色div中有一个嵌入式视频(youtube)。该脚本窃取其内容并将其作为innerHTML放入正文中。
答案 2 :(得分:1)
这让我想起了document.write与&lt; script /&gt;的问题。标签。
所在。不要在睡觉前回答SO问题。
我在Firebug中尝试了以下内容
//break up initial embed into single chunks
document.body.innerHTML = "<e"+"mbe"+"d></embed>"
当我检查innerHTML的值时,预计会出现。这里的想法是将初始字符串分解为多个连接字符串。愚蠢,但可能的解决方法。