这是 HTML5 Shiv 中的一个拼写错误吗?

6

我刚看到了html5shiv并找到了这段代码:

function addStyleSheet(ownerDocument, cssText) {
    var p = ownerDocument.createElement('p'),
        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;

    p.innerHTML = 'x<style>' + cssText + '</style>';
    return parent.insertBefore(p.lastChild, parent.firstChild);
  }

在哪里使用 p.innerHTML = 'x<style>' + cssText + '</style>';。为什么这里使用x


如果您将其删除,会发生什么? - Ja͢ck
如果我移除那个的话,它似乎没有起作用。(旧版浏览器不支持html5元素) - Navin Rauniyar
我认为这与 X-UA-Compatible 有关? - Mike Ante
我不确定,但认为它可能是用于怪异模式... - Bhojendra Rauniyar
3
请注意,p并没有被插入到parent中,而是插入了p.lastChild(即仅插入了<style>标签,而不是x文本)。这似乎是为了处理某些奇怪的浏览器问题,其中innerHTML不能仅使用一个<style>元素,而需要在其之前添加一些其他文本。 - apsillers
1个回答

3

不,这不是笔误。

根据关于x的问题aFarkas已经回答了。

这是因为旧版IE存在非标准概念。类似于CSS中的“具有布局”的概念,它们有内部HTML渲染的作用域和无作用域元素的概念。

aFarkas指出了两篇文章

问题

当IE将一串HTML转换为DOM结构时,它会将SCRIPT和STYLE标记与其他任何标记区别对待。当它遇到其中一个标记时,它会检查是否有任何节点在它之前是“可见的”。(可见的非常宽泛地指渲染结构时将显示的节点。)如果在SCRIPT或STYLE之前没有任何可见节点,它就会简单地丢弃它们并继续处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接