編輯
「什麼樣的代碼會可能導致這個錯誤?」
看起來這個錯誤與document.body
由於頁面處於嚴格模式而不可用有關。該模式進入在百思買作爲指令的結果:
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
至於Internet Explorer中的選項chrome=1
創建Google Content Frame (GCF)將強制頁面在嚴格模式下進行操作。 comcast.com由於其使用XHTML
的doctype標頭而處於嚴格模式。
There are various ways to enter document modes in 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
$("body").append('<p>Append!</p>');
我通過一些插件的看了看,找不到這是造成過載或衝突的準確代碼行,但它必須在那裏,更多的這可能是由於嗅探用戶代理的結果。
對我來說,這在bestbuy網站上沒有任何問題在控制檯上工作。儘管它不完全是IE8,而是IE10中的IE8模式。 – 2013-05-02 03:38:27
@TomasKirda是的,用虛擬機在IE8中試試它,讓我知道它是否有效。 – 2013-05-02 04:04:34
對不起,我不明白你爲什麼不簡單地使用document.body.appendChild(p); – 1nfiniti 2013-05-04 05:56:22