如何将HTML内容设置为iframe

mr.*_*fox 30 html javascript iframe internet-explorer-8 internet-explorer-9

我有一个HTML字符串

<html>
  <body>Hello world</body>
</html> 
Run Code Online (Sandbox Code Playgroud)

我想用JavaScript将它设置为iframe.我试图像这样设置HTML:

contentWindow.document.body.innerHTML
Run Code Online (Sandbox Code Playgroud)

要么

contentDocument.body.innerHTML
Run Code Online (Sandbox Code Playgroud)

要么

document.body.innerHTML
Run Code Online (Sandbox Code Playgroud)

但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>
Run Code Online (Sandbox Code Playgroud)

Mat*_*tra 51

你可以使用:

document.getElementById('iframe1').contentWindow.document.write("<html><body>Hello world</body></html>");
Run Code Online (Sandbox Code Playgroud)

这是一个jsFiddle,适用于所有主流浏览器.

请注意,contentDocument.write您应该使用contentWindow.document.write:而不是它,这使它在IE7中也可以使用.

  • 我需要使用open/close来使它在chrome中工作:iframe.contentWindow.document.open('text/htmlreplace'); iframe.contentWindow.document.write(内容); iframe.contentWindow.document.close(); (2认同)
  • 如果您不想追加,可以使用 `document.getElementById('output_iframe1').src = "data:text/html;charset=utf-8," + escape(html_string);` [(source )](/sf/answers/582541781/)。 (2认同)

Chr*_*phe 20

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

使用html5,您将能够使用srcdoc属性.


Mat*_*aug 7

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();
Run Code Online (Sandbox Code Playgroud)

这可能只适用于IE.


Fla*_*Fla 5

2023年,这个问题的正确答案是使用元素srcdoc的属性<iframe>。我可以直接在您的 HTML 文件中或使用 javascript 完成:

document.getElementById('iframe').srcdoc = "<html><body>Hello world!</body></html>";
Run Code Online (Sandbox Code Playgroud)