2009-09-25 4 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> 

После щелчка Firefox возвращает [объект HTMLDocument]. Internet Explorer возвращает undefined.getElementById.contentDocument error in IE

Как выбрать элемент iView с помощью Internet Explorer? Благодарю.

+4

@Mauris: он вежлив, и задал всего 10 вопросов. У него будет время узнать правила здесь. Сделайте те комментарии к тем poeple, которые задали более 100 вопросов и никогда не принимали anser, или не ответили на вопрос. – voyager

+0

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

+1

извините, не знаю, что эта система имеет «прием» функциональность, спасибо:) –

ответ

10

От this page:

Mozilla поддерживает W3C стандарт доступа к объекту документа IFrame через IFrameElm.contentDocument, в то время как Internet Explorer требует, чтобы получить доступ к нему через документ. frames ["name"], а затем получить доступ к результирующему документу.

Так что вам нужно обнаружить браузер и на IE сделать что-то вроде этого, вместо:

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

Вы, кажется, хотите получить содержимое iframe правильно?

IE7 и FF2:

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

Поперечное браузер эквивалентно contentDocument (в том числе самого Firefox, где contentDocumentделает работу) является contentWindow.document ,

Так попробуйте:

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

contentWindow получает вам ссылку на window объекте IFrame, и конечно .document только объект DOM Document для фрейма.

.

+1

работал для меня, чтобы решить мою проблему с IE7. более новые версии IE, похоже, поддерживают contentDocument. –

3

обнаружения Используйте функцию, так как contentDocument поддерживается в 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 

работает для меня в Internet Explorer и Firefox, а

contentDocument.body.innerHTML 

будет работать только в Firefox.

1

ли что-то вроде этого:

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

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

alert(frameDoc); 

См this page для более подробной информации