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