Как установить HTML-контент в iframe

У меня есть строка HTML

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

и я хочу установить его в iframe с JavaScript. Я пытаюсь установить HTML следующим образом:

contentWindow.document.body.innerHTML

или

contentDocument.body.innerHTML

или

document.body.innerHTML

но IE дает "Доступ запрещен". или "Объект не поддерживает это свойство или метод". или "Недопустимый конечный элемент для действия". ошибки.

Вот мой полный код:

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

Ответ 1

Вы можете использовать:

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

Здесь jsFiddle, который работает во всех основных браузерах.

Обратите внимание, что вместо contentDocument.write вы должны использовать contentWindow.document.write: это заставляет его работать и в IE7.

Ответ 2

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

С помощью html5 вы сможете использовать атрибут srcdoc.

Ответ 3

innerHTML немного сложнее, особенно в IE, где такие элементы, как thead, доступны только для чтения и вызывают много проблем.

На основе документации по msdn вы можете попробовать documentMode, которая предоставляет свойство innerHTML.

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

это может работать только в IE.

Ответ 4

Как насчет document.documentElement.innerHTML. Но знайте, что все на странице будет заменено даже на script, который делает это.

Для iframe это будет так: myIFrame.contentWindow.document.documentElement.innerHTML

Ответ 5

Дорогие все

Я надеюсь, что все могут помочь мне, я испытываю трудности и устал от создания слайдеров с более чем 200 слайдами в HTML и CSS.

Я хочу создавать слайды с 200 слайдов HTML & CSS

index.html

CSS/style.css

JS/scripts.js

IMG/

слайды /

+ 1.html & 1.css

+ 2.html & 2.css

+ 3.html & 3.css

......

+ 200.html & 200.css

Мой индекс

<!DOCTYPE HTML>
<html>
<head>
   <meta charset="utf-8">
   <link href="./css/style.css" rel="stylesheet" />
   <title>Slider Page Simulator</title>
</head>
 <style>
 
 </style>
<body>
 
 
 
 <div class="wrap">
   <div id="slides">
      <!-- load in slides -->
   </div>

 </div>  
</body>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript"  src="./js/mysliders.js"></script>
</html>

Ответ 6

попробуйте:

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

обновление:

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