1

我正在尝试修复我正在使用的富文本编辑器中的一个错误,该错误会导致<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>.

4

3 回答 3

6

根据W3C的说法,这可能无法解决您的问题,但<embed>在 HTML5 之前并不是任何标准化 HTML 版本的一部分。

于 2009-01-12T21:48:21.350 回答
1

尽管 <embed> 不是标准 html 的一部分,但它已被广泛实施,因此是事实上的标准。

也就是说,我正在运行 Firefox 3(MineField v3.0.0.5)并且有点出乎意料,但功能完全正确。我期望将确切的HTML 放入我选择的元素中,但我得到了干净的html。

由于 <embed 是一个空标签(即它不能有内容,只有属性),Firefox 把这个

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

进入

<embed  attribute="value"/>

,这是一个完全有效的封闭标签。它对其他空标签执行相同的操作,例如 <input /> 和 <image>

此页面上,您可以看到这一点。该页面的无脚本版本在亮粉色 div 内嵌入了一个视频 (youtube)。该脚本窃取其内容并将其作为 innerHTML 放入正文中。

于 2009-01-12T22:04:40.193 回答
1

这让我想起了 document.write 与 <script /> 标记有关的问题。

谎言。不要在睡前回答这些问题。

我在 Firebug 中尝试了以下操作

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

当我检查 innerHTML 的值时,得到了预期的显示。这里的想法是将初始字符串分解为多个连接的字符串。愚蠢,但可能的解决方法。

于 2009-01-13T08:05:04.273 回答