编辑
“什么样的代码可能导致这个错误?”
该错误似乎与document.body
由于页面处于严格模式而导致不可用有关。作为指令的结果,在 bestbuy 进入模式:
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
对于 Internet Explorer,chrome=1
创建Google 内容框架 (GCF)的选项将强制页面以严格模式运行。comcast.com 处于严格模式,因为其 doctype 标头使用XHTML
.
IE中进入文档模式的方法有很多种
页面处于严格模式的最终结果是渲染表面在document.documentElement
. 此代码将在查看区域的底部附加文本和段落:
var p = document.createElement("p");
p.innerHTML = "APPEND";
var holder = Element.prototype.appendChild;
holder.apply(document.documentElement, [p]);
我做了这个小提琴来测试这种行为:http: //jsfiddle.net/LAkQk/
我首先决定在多个浏览器中测试这种行为。
在 chrome、firefox、safari 和 IE8 中运行没有错误。
请注意,要在 ie8 上测试这个小提琴(或任何真正的),您必须使用/embedded
然后单击“结果”。
因此,让我们从确认这些站点上存在导致冲突的某些内容开始。
我能够在 bestbuy.com 上使用 IE8 重复该错误,并确认它在 google.com 上确实有效
但是,这不是问题,apply
也不是appendChild
说的问题。通过document.body
. 您可以在 bestbuy.com 上使用此代码自行测试:
(function(){
var p = document.createElement("p");
p.innerHTML = "APPEND";
var holder = Element.prototype.appendChild;
var d = document.getElementById("header");
holder.apply(d, [p]);
})()
也许是因为他们的插件之一附加在身体上的东西。有趣的是,这可以在 bestbuy.com 的 ie 控制台上运行
$("body").append('<p>Append!</p>');
我查看了许多插件,找不到导致过载或冲突的确切代码行,但它必须存在,很可能是嗅探用户代理的结果。