2009-09-25 40 views
17
<html> 
    <script type="text/javascript"> 
     function func() { 
     alert(document.getElementById('iView').contentDocument); 
     }  
    </script> 
    <body> 
     <iframe id="iView" style="width:200px;height:200px;"></iframe> 
     <a href="#" onclick="func();">click</a> 
    </body> 
</html> 

Sau khi nhấp chuột, Firefox trả về [đối tượng HTMLDocument]. Internet Explorer trả về không xác định.getElementById.contentDocument lỗi trong IE

Làm cách nào để chọn phần tử iView với Internet Explorer? Cảm ơn.

+4

@Mauris: ông đang được lịch sự, và đã yêu cầu chỉ 10 câu hỏi. Anh ấy sẽ có thời gian để học các quy tắc ở đây. Đưa ra những nhận xét đó cho những người đã hỏi hơn 100 câu hỏi và chưa bao giờ chấp nhận anser, hoặc trả lời một câu hỏi. – voyager

+0

http://meta.stackexchange.com/questions/23475/should-questions-with-no-accepted-answers-be-punished-after-awhile – voyager

+1

xin lỗi, không biết rằng hệ thống này có chức năng 'chấp nhận', cảm ơn:) –

Trả lời

10

Từ this page:

Mozilla hỗ trợ chuẩn W3C tiếp cận đối tượng tài liệu iframe qua IFrameElm.contentDocument, trong khi Internet Explorer đòi hỏi bạn phải truy cập nó thông qua tài liệu. khung ["name"] và sau đó truy cập tài liệu kết quả.

Vì vậy, bạn cần để phát hiện các trình duyệt và trên IE làm điều gì đó như thế này thay vì:

document.frames['iView'].document; 
3

Bạn có vẻ muốn nhận nội dung của khung nội tuyến phải không?

IE7 và FF2:

var iframe = document.getElementById('iView'); 
alert(iframe.contentWindow.document.body.innerHTML); 
42

Các qua trình duyệt tương đương với contentDocument (bao gồm Firefox bản thân, nơi contentDocumentkhông làm việc) là contentWindow.document .

Vì vậy, hãy thử:

alert(document.getElementById('iView').contentWindow.document); 

contentWindow giúp bạn một tham chiếu đến đối tượng window của iframe, và tất nhiên .document chỉ là đối tượng DOM Document cho iframe.

.

+1

đã làm việc cho tôi để giải quyết vấn đề của tôi với IE7. các phiên bản IE mới hơn dường như hỗ trợ contentDocument. –

3

Sử dụng tính năng phát hiện, như contentDocument được hỗ trợ trong IE 8:

var iframe = document.getElementById("iView"); 
var iframeDocument = null; 
if (iframe.contentDocument) { 
    iframeDocument = iframe.contentDocument; 
} else if (iframe.contentWindow) { 
    // for IE 5.5, 6 and 7: 
    iframeDocument = iframe.contentWindow.document; 
} 
if (!!iframeDocument) { 
    // do things with the iframe's document object 
} else { 
    // this browser doesn't seem to support the iframe document object 
} 
2
contentWindow.document.body.innerHTML 

đang làm việc cho tôi trong trình duyệt Internet Explorer và Firefox, trong khi

contentDocument.body.innerHTML 

sẽ chỉ làm việc trong Firefox.

1

Làm như thế này:

var myFrame = document.getElementById('iView'); 
var frameDoc = myFrame.contentDocument || myFrame.contentWindow; 

if (frameDoc.document){ 
    frameDoc = frameDoc.document; 
} 

alert(frameDoc); 

Xem this page để biết thêm chi tiết