【问题标题】:iframes rendering mysteriously differently from regular web pages?iframe 呈现与常规网页的神秘不同?
【发布时间】:2014-11-01 17:04:22
【问题描述】:

我遇到了一个问题,即 iframe 与 iframe 外部页面的呈现方式不同。这发生在 Chrome 和 Firefox 中。我真正需要做的是强制 iframe 以与常规主页相同的方式呈现。我处于无法更改 iframe 内的内容的情况。

两个例子:

示例 1:高于 H1s 的边距

代码(这是整个 HTML 文件):

<h1>hello</h1>

<br><br>

<iframe srcdoc="<h1>hello</h1>"></iframe>

截图:

问题:

iframe 中 H1 上方的边距过多。我需要让它们匹配。具体来说,我需要 iframe 中的 h1 进行匹配。而且,这不可能是针对这种特定情况的特定 CSS hack。我知道在这里我可以修改 iframe 代码以使用 CSS 破解它。但是为什么它的渲染不一样呢?

示例 2:css 中缺少“px”规范

代码(这是整个 HTML 文件):

<div style='border:1px solid black;width:30px;height:30px;border-radius:30'></div>

<br><br>

<iframe srcdoc="<div style='border:1px solid black;width:30px;height:30px;border-radius:30'></div>"></iframe>

截图:

问题:

在 iframe 中,border-radius 参数被忽略,因为缺少 'px'。在 iframe 之外它很好。同样,显然我可以在 iframe 中添加“px”,但不幸的是,这不是一个选项。如何使 iframe 以与主页相同的方式呈现?

【问题讨论】:

    标签: html css google-chrome dom browser


    【解决方案1】:

    父文档是使用与 iframe 不同的解析器(我猜是 Quirks 模式)呈现的。由于srcdoc 属性是仅 html5 的属性,因此 iframe 使用 html5 解析器呈现。

    如果您通过添加&lt;!DOCTYPE html&gt; 将父文档定义为html5,您会注意到父文档也会有额外的边距和正方形。

    也许您可以尝试向srcdoc 字符串添加另一个文档类型,以强制浏览器以另一种模式呈现它。我无法让它工作,我猜它不受支持。

    【讨论】:

    • 这确实是 Quirks Mode 问题,但不是解析器问题,它不依赖于 srcdoc 属性。 任何符合已发布 HTML 规范的 doctype 都会触发“标准模式”; &lt;!DOCTYPE html&gt; 只是实现这一目标的最简单方法。所以这不是 HTML5 问题;怪癖模式和“标准模式”之间的区别比 HTML5 早了很多年。
    • 根据 HTML5 建议,使用 srcdoc 属性创建的任何文档都以“无怪癖模式”(他们的词为“标准模式”)呈现。这个有点隐蔽,不过在w3.org/TR/html5/syntax.html#the-initial-insertion-mode@
    • 太好了,是的,就是这样。特别感谢 Jukka - 您在文档中发现了这一点。太棒了。
    • 正如@JukkaK.Korpela 所说,使用srcdoc 属性创建的任何文档都以“无怪癖模式”呈现。但请特别注意,即使文档指定了一个古怪的 DOCTYPE,也会使用“无怪癖模式”。这在规范中有所暗示,但在此处拼写更清楚 github.com/w3c/html/issues/254
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多