23

Mam ciąg HTMLJak ustawić zawartość HTML do iframe

<html> 
    <body>Hello world</body> 
</html> 

i chcę, aby ustawić go do iframe z javascript. Próbuję ustawić HTML tak:

contentWindow.document.body.innerHTML 

lub

contentDocument.body.innerHTML 

lub

document.body.innerHTML 

ale IE daje "Odmowa dostępu". lub "Obiekt nie obsługuje tej właściwości lub metody." lub "Nieprawidłowy końcowy element akcji." błędy.

Oto mój pełny kod:

<!DOCTYPE html> 
<html> 
    <head> 
    <script type="text/javascript" src="jquery_1.7.0.min.js"/> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
     var htmlString = "<html><body>Hello world</body></html>"; 
     var myIFrame = document.getElementById('iframe1'); 
     // open needed line commentary 
     //myIFrame.contentWindow.document.body.innerHTML = htmlString; 
     //myIFrame.contentDocument.body.innerHTML = htmlString; 
     //myIFrame.document.body.innerHTML = htmlString; 
     //myIFrame.contentWindow.document.documentElement.innerHTML = htmlString; 
     }); 
    </script> 
    </head> 
    <body> 
    <p>This is iframe: 
     <br> 
     <iframe id="iframe1"> 
     <p>Your browser does not support iframes.</p> 
     </iframe> 
    </body> 
</html> 
+0

Dlaczego nie ładujesz strony, to działa bardzo dobrze? dlaczego chcesz użyć łańcucha do załadowania? daj mi znać –

Odpowiedz

38

Można użyć:

document.getElementById('iframe1').contentWindow.document.write("<html><body>Hello world</body></html>"); 

Oto jsFiddle, który działa we wszystkich głównych przeglądarkach.

Pamiętaj, że zamiast contentDocument.write powinieneś użyć contentWindow.document.write: to sprawia, że ​​działa również w IE7.

+0

Dzięki za edycję @ user1846192 –

+0

uwaga, jeśli czytasz i piszesz i wysyłasz iframe, będziesz musiał Napisać document.getElementById ('') contentWindow.document.write iframe1 ("");. mieć pusty ciąg czyta się ten var iframe_html = document.getElementById ('') contentWindow.document.body iframe_exe_uploader. .innerHTML; –

+1

musiałem użyć open/close aby dostać pracy w chrome: iframe.contentWindow.document.open ('text/htmlreplace'); iframe.contentWindow.document.write (treść) ; iframe.contentWindow.document.close(); – Henry

0

Jak o document.documentElement.innerHTML. Ale wiem, że wszystko na stronie zostanie zastąpione nawet skryptem, który to robi.

Dla iframe byłoby jak ten myIFrame.contentWindow.document.documentElement.innerHTML

+0

Dziękuję za odpowiedź, ale jeśli użyję tego kodu, tj. powiedz ten błąd: "Nieprawidłowy ostatni element akcji." –

5

The innerHTML jest nieco kłopotliwe zwłaszcza w IE, gdzie elementy jak thead są tylko do odczytu i spowodować wiele kłopotów.

Na podstawie dokumentacji na msdn można wypróbować documentMode, która zapewnia właściwość innerHTML.

myIFrame = myIFrame.contentWindow || 
    myIFrame.contentDocument.document || 
    myIFrame.contentDocument; 
myIFrame.document.open(); 
myIFrame.document.write('Your HTML Code'); 
myIFrame.document.close(); 

to może działać tylko w IE.

+0

spróbuj tego nowego rozwiązania, dodałem kilka dalszych kontroli – MatthiasLaug

+0

Dzięki za edycję, ale już zaakceptowałem odpowiedź @ user1846192 –

-2

spróbować:

$('iframe').load(function() { 
    $(this).contents().find('body').append("Hello world"); 
}); 

zmiana:

$(function(){ 
    $('iframe').load(function() { 
     $(this).contents().find('body').append("Hello world"); 
    }); 
}) 
+1

to nie działa –

15
var htmlString="<body>Hello world</body>"; 
var myIFrame = document.getElementById('iframe1'); 
myIFrame.src="javascript:'"+htmlString+"'"; 

HTML5 będziesz mógł używać srcdoc attribute.

+1

@ mr.boyfox Poprawione, zapomniałem cytatów wokół łańcucha html. Powinno to działać w IE7 i IE8. – Christophe

+0

yes !, Teraz działa poprawnie, Thanks @Christophe! –

Powiązane problemy