2010-06-30 25 views
11

任何人在這裏知道我可以動態更改JavaScript的文檔類型?我如何更改DOCTYPE

我有這個功能試過,

document.doctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'); , 

,但它不工作。

+1

只是好奇,你爲什麼要做到這一點的? – 2010-06-30 08:58:03

+0

好吧,如果瀏覽器是Firefox或Opera,我想更改文檔類型。我得到了瀏覽器檢測代碼的工作。 – mana 2010-06-30 09:00:00

+1

即使你可以,你對它有什麼期待? IIRC,瀏覽器在解析頁面時只考慮一次doctype。 – Piskvor 2010-06-30 09:00:05

回答

1

我不認爲你可以。 doctypelisted作爲W3C文檔中的一個屬性,但它是隻讀的。即使不是這樣,我無法想象改變它會在現實世界中的瀏覽器有什麼影響。

重新您的後續意見:你不得不處理這個服務器端和服務回量身定做的目標瀏覽器的頁面。但是,除了一些非常邊緣的情況,你不應該這樣做。

+0

這是隻讀屬性:( – Sarfraz 2010-06-30 09:01:00

+0

@sAc:剛到那裏。:-) – 2010-06-30 09:01:38

+2

關於你的最後一句話(「他們只是標記怪癖模式或不取決於*是否是文檔類型,而不是它是什麼」) : 這不是真的。幾個Doctypes會引發怪癖模式,就像OP在他的問題的一個評論中提到的HTML 3.2一樣。請參閱[使用Doctype激活瀏覽器模式](http://hsivonen.iki.fi/doctype/#handling)。 – 2010-06-30 09:38:01

3

document.doctype is a read-only財產,而不是方法,顯然根據MDC。

你需要的是:

https://developer.mozilla.org/En/DOM/DOMImplementation.createDocumentType

返回其既可以在創建文檔與DOMImplementation.createDocument用於爲DocumentType對象,或者它們可以通過Node.insertBefore被放入文檔()或Node.replaceChild():

+0

'createDocumentType'在所有瀏覽器中都不可用。鉻沒有它。 – 2011-05-30 23:17:13

+0

2013年3月30日:鉻有它,和IE9 + – 2013-03-30 21:15:26

0

即使你可以,你的代碼會在頁面已經決定渲染之後執行,在這種情況下,改變doctype的效果是沒有用的。我能想象的doctype問題的現代瀏覽器的唯一方法是,你是依託於IE怪癖模式 - 解決您的設計爲所有的瀏覽器,但IE瀏覽器,然後再看看IE特定的造型。

3

要盡力證明這種使用情況下,我有以下情形:

我有一個渲染頁面的一小portition一個TAL模板。然後我用在父標記,portition這樣的:

<html tal:omit-tag="True" ...> 
    <body tal:omit-tag="True"> 
    <div class="wrapper" tal:omit-tag="True"> 
     .. 

     <div id="mydiv" tal:content="foo()">Example content.</div> 

     .. 
    </div> 
    </body> 
</html> 

這樣,這TAL模板可視/編輯作爲一個獨立的HTML文件,由設計師。不能在TAL中忽略DTD,所以不能在那裏添加。

一個簡單的方法來使用JavaScript添加它是這樣的:

if (!document.doctype) { 
    document.write('<!doctype HTML>\n' + \ 
     document.head.outerHTML + \ 
     document.body.outerHTML); 
} 
0

如果問題只與IE瀏覽器,因爲我也遇到了同樣的問題,我用的怪癖模式的IE瀏覽器 - 只需使用評論在DOC TYPE聲明和IE進入怪癖模式之前。

,你可以解決的另一種方式是首先加載腳本來檢測瀏覽器,然後用瀏覽器參數到其他頁面,您可以聲明依賴於瀏覽器重定向的文檔類型。

例如我有我的代碼做的是這樣的: -

<!--[if lt IE 9]> 
<![endif]--> 
<![if gte IE 9]> 
<!DOCTYPE html> 
<![endif]> 

這裏,我已經從browe

10

我希望這一個可能會幫助你們中的一些(在測試刪除文檔類型declearation控制檯和它的變化實際DOCTYPE)

var newDoctype = document.implementation.createDocumentType(
'html', 
'-//W3C//DTD XHTML 1.0 Transitional//EN', 
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdd' 
); 

document.doctype.parentNode.replaceChild(newDoctype,document.doctype); 
+0

感謝阿卡什,這幫助了我在PhantomJS一段時間一直在掙扎的東西。 – 2013-05-27 17:16:28

+2

document.implementation.createDocumentType()在IE8中不可用,這很遺憾,我現在需要使用它。 – flyingace 2014-02-18 22:05:47

+0

試試這個 http:// stackoverflow。com/questions/8227612/how-to-create-document-objects-with-javascript – 2014-02-19 05:50:57