2010-06-30 29 views
11

bất cứ ai ở đây biết cách tôi có thể thay đổi động kiểu tài liệu bằng javascript?làm cách nào để tôi có thể thay đổi DOCTYPE

tôi đã thử với chức năng này,

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

nhưng nó không hoạt động.

+1

Chỉ cần tò mò, tại sao bạn muốn thực hiện việc này? –

+0

tốt, tôi muốn thay đổi kiểu tài liệu nếu trình duyệt là firefox hoặc opera. Tôi đã nhận được mã phát hiện trình duyệt. – mana

+1

Thậm chí nếu bạn có thể, bạn đang mong đợi hiệu ứng gì từ nó? IIRC, trình duyệt chỉ xem xét loại tài liệu một lần khi nó phân tích cú pháp trang. – Piskvor

Trả lời

1

Tôi không nghĩ bạn có thể. doctypelisted là thuộc tính trong tài liệu W3C, nhưng nó chỉ đọc. Ngay cả khi nó không được, tôi không thể tưởng tượng những gì hiệu ứng thay đổi nó sẽ có trong các trình duyệt trong thế giới thực.

Làm lại các nhận xét tiếp theo của bạn: Bạn sẽ phải xử lý phía máy chủ này và phân phát lại trang phù hợp với trình duyệt mục tiêu. Nhưng bạn không cần phải làm điều đó trong bất kỳ trường hợp nào nhưng rất đơn giản.

+0

Đây là tài sản chỉ đọc: ( – Sarfraz

+0

@sAc: Chỉ cần đến đó. :-) –

+2

Giới thiệu về câu cuối cùng của bạn (“chúng chỉ gắn cờ chế độ quirks hoặc không phụ thuộc vào việc có * là * một loại tài liệu, không phải là gì”) : Đo không phải sự thật. Một số Doctypes sẽ kích hoạt chế độ quirks, giống như HTML 3.2 một trong những OP được đề cập trong một trong những ý kiến ​​của mình cho câu hỏi của mình. Xem [Kích hoạt chế độ trình duyệt với Doctype] (http://hsivonen.iki.fi/doctype/#handling). –

3

document.doctype is a read-only thuộc tính, không phải phương pháp, rõ ràng theo MDC.

gì bạn cần là:

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

Trả về một đối tượng DocumentType đó hoặc có thể được sử dụng với DOMImplementation.createDocument khi tạo tài liệu hoặc họ có thể được đưa vào tài liệu qua Node.insertBefore() hoặc Node.replaceChild():

+0

'createDocumentType' không khả dụng trong tất cả các trình duyệt. Chromium không có. –

+0

30 tháng 3 năm 2013: Chromium có nó và IE9 + –

0

Thậm chí nếu bạn có thể, mã của bạn sẽ thực thi sau khi trang đã quyết định hiển thị theo trường hợp nào ảnh hưởng của việc thay đổi loại tài liệu là gì. Cách duy nhất tôi có thể tưởng tượng các trình duyệt hiện đại có vấn đề về doctype là bạn đang dựa vào chế độ quirks trong IE - sửa thiết kế của bạn để làm việc cho tất cả các trình duyệt nhưng IE, sau đó xem phong cách cụ thể của IE.

3

Để cố gắng biện minh cho trường hợp sử dụng này, tôi có các tình huống sau:

Tôi có một mẫu TAL mà ám một portition nhỏ của trang. Sau đó, tôi bao bọc cụm từ đó trong các thẻ mẹ như sau:

<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> 

Bằng cách này, mẫu TAL này có thể xem/chỉnh sửa dưới dạng tệp HTML độc lập. Người ta không thể bỏ qua DTD trong TAL, vì vậy nó không thể được thêm vào đó.

Một cách dễ dàng để thêm nó với JavaScript là như thế này:

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

Nếu vấn đề là chỉ với IE, Như tôi cũng trải qua cùng một vấn đề, tôi đã sử dụng quirks Chế độ cho trình duyệt IE - Chỉ cần sử dụng một bình luận trước khi DOC LOẠI khai báo và IE sẽ đi vào chế độ quirks. Một cách khác mà bạn có thể làm việc xung quanh đầu tiên là tải tập lệnh để phát hiện trình duyệt và sau đó chuyển hướng với thông số trình duyệt đến trang khác nơi bạn có thể khai báo loại tài liệu phụ thuộc của Trình duyệt.

ví dụ về những gì tôi đã làm với mã của tôi là như sau: -

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

Ở đây tôi đã gỡ bỏ các declearation DOCTYPE từ browe

10

Tôi hy vọng này có thể giúp một số bạn (Tested trong Bảng điều khiển và nó thay đổi DOCTYPE thực tế)

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

Cảm ơn Akash, điều này đã giúp tôi giải quyết vấn đề mà tôi đã gặp phải trong một thời gian trong PhantomJS. –

+2

document.implementation.createDocumentType() không có sẵn trong IE8, thật đáng buồn, nơi tôi cần sử dụng nó vào lúc này. – flyingace

+0

hãy thử số http: // stackoverflow này.com/questions/8227612/how-to-create-document-objects-với-javascript –

Các vấn đề liên quan