webentwicklung-frage-antwort-db.com.de

So setzen Sie HTML-Inhalte in einen iframe

Ich habe eine HTML-Zeichenfolge

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

und ich möchte es mit JavaScript auf einen Iframe setzen. Ich versuche, das HTML so einzustellen:

contentWindow.document.body.innerHTML

oder

contentDocument.body.innerHTML

oder

document.body.innerHTML

aber IE gibt "Zugriff verweigert." oder "Objekt unterstützt diese Eigenschaft oder Methode nicht." oder "Ungültiges letztes Element für die Aktion.".

Hier ist mein vollständiger Code:

<!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>
30
mr.boyfox

Du könntest benutzen:

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

Hier ist ein jsFiddle , das in allen gängigen Browsern funktioniert.

Beachten Sie, dass anstelle von contentDocument.write du solltest benutzen contentWindow.document.write: Damit funktioniert es auch im IE7.

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

Mit HTML5 können Sie das srcdoc-Attribut verwenden.

19
Christophe

Das innerHTML ist ein bisschen knifflig, besonders im IE, wo Elemente wie thead schreibgeschützt sind und viel Ärger verursachen.

Basierend auf der Dokumentation zu msdn können Sie documentMode versuchen, das eine innerHTML -Eigenschaft bereitstellt.

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

dies funktioniert möglicherweise nur im IE.

6
MatthiasLaug

Wie wäre es mit document.documentElement.innerHTML. Aber wissen Sie, dass alles auf der Seite ersetzt wird, auch das Skript, das dies tut.

Für einen iframe wäre es so myIFrame.contentWindow.document.documentElement.innerHTML

0
user568109