【问题标题】:What's up with innerHTML and <embed>?innerHTML 和 <embed> 是怎么回事?
【发布时间】:2009-01-12 21:31:31
【问题描述】:

我正在尝试修复我正在使用的富文本编辑器中的错误,该错误会导致插入 &lt;embed&gt; 标记而没有结束标记(这会完全搞砸输出)。我已将此问题隔离到此操作:

// 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') 之类的内容,因为此编辑器的实际输入很容易包含围绕&lt;embed&gt; 的几段文本;在纸面上,innerHTML 非常适合这个用例,但我无法让它与 &lt;embed&gt; 一起使用。

【问题讨论】:

  • 如果你创建 对你有用吗?它还会 foobar 你的内容吗?
  • mfn -- 将 包装在 中使其在 Google Chrome 中根本不显示,但(奇怪的是)将其包装在

    中足以解决显示问题在 RSS 阅读器中。如果您将其发布为答案,我会给您功劳。

标签: javascript html embed innerhtml


【解决方案1】:

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

【讨论】:

  • 非常正确,所以 +1。但不幸的是,人们使用它,它是一个讨厌的错误的来源,在适当的情况下,会切断未关闭的 之后的所有内容。 ;)
  • 不再完全正确; &lt;embed&gt; 已添加到 HTML5 规范中。 dev.w3.org/html5/spec/Overview.html#the-embed-element
【解决方案2】:

虽然 不是标准 html 的一部分,但它已被广泛实施,因此是事实上的标准。

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

由于

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

进入

<embed  attribute="value"/>

,这是一个完全有效的封闭标记。它对其他空标签也是如此,例如

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

【讨论】:

  • 我的印象是,事实上的标准几乎是通用的标准。但是,鉴于该对象(标准版本)同样受到广泛支持和使用,我不认为 embed 是事实上的标准。
【解决方案3】:

这让我想起了 document.write 使用 标签时遇到的问题。

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

我在 Firebug 中尝试了以下方法

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

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

【讨论】:

  • 您所指的问题是脚本标签不能包含任何标签,并且解析器会看到结束标签的开头:“”。如果您在 document.write 中使用了“”格式,那么它就可以工作了。
  • 据我了解,这只会在分配之前评估为“”,同样的事情会失败。我也尝试过类似innerHTML +=“嵌入>”。试图将分配分成多行(如innerHTML += "&lt;/embe")只会引发错误。
  • 很奇怪,很抱歉。我以为我会运行一堆测试,但它现在不起作用。我被解雇了。
  • 不过,你给了我另一个想法来测试。那些总是好的。我们总是可以对“Mail Goggles”风格的 SO 功能提出功能请求:在 60 秒内解决一些添加/编程难题,然后发布! ;)
猜你喜欢
  • 2014-07-07
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多