innerHTML和<embed />有什么用?

时间:2009-01-12 21:31:32

标签: javascript html embed innerhtml

我正在尝试修复我正在使用的富文本编辑器中的错误,导致插入<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 个答案:

答案 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的值时,预计会出现。这里的想法是将初始字符串分解为多个连接字符串。愚蠢,但可能的解决方法。