2016-12-01 49 views
1

昨天,當我發佈一個不同的(相關)問題: CSS height 100% behaves different when embedded in iframe不同CSS繼承使用document.write VS由節點生成DOM節點

這個問題的答案使我的文檔類型看成什麼是一個潛在的原因發生。但是,我現在開始認爲更惡毒的事情正在發生。

當創建由節點的iframe節點和設置一個DOCTYPE與

document.implementation.createDocumentType("html", "", "") 

內容呈現不同比如果完全相同的內容是使用呈現

document.write("<!DOCTYPE html>") 

在這裏看到的jsfiddle:https://jsfiddle.net/570qvk2p/3/

在我看來,也許doctype創建的第一種方式並不受其他DOM/CSS的相同方式的尊重。

關於這裏發生了什麼以及我如何修復它的任何想法將不勝感激。我的DOM不幸的是必須逐個節點地構建,從文檔類型開始 - 我無法改變這個事實。

我基本上試圖複製一個以前渲染的DOM樹,並有這種類型的顯示錯誤顯然是我想避免的東西。原始DOM呈現與使用document.write呈現時的外觀相同。

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身**中重現**所需的最短代碼**請參閱:如何創建一個最小化,完整和可驗證的示例](http://stackoverflow.com/help/mcve),[我的網站上的某些內容不起作用,我可以只粘貼一個鏈接嗎?](http: //meta.stackoverflow.com/questions/125997/something-on-my-web-site-doesnt-work-can-i-just-paste-a-link-to-it)和[SSCCE](http:///www.sscce.org/) – Quentin

回答

3

<iframe></iframe>創建文檔。由於沒有文檔類型,這是致力於使用怪癖模式。將文檔類型節點添加到文檔不會改變此承諾。

您的document.write()代碼吹走舊文檔並創建一個新文檔。在開始時編寫<!DOCTYPE html>會將新文檔置入標準模式。

+0

你的錢是對的!使用只包含doctype的srcdoc屬性啓動iframe修復了顯示錯誤,不幸的是這個屬性不被IE支持(甚至是邊緣)。 – user7230402