Loading a string if HTML into an iframe using JavaScript
Asked Answered
O

3

7

I have a string of HTML tags that I can add to or change whenever I like.

"<html><body><script language="javascript" src=""></script></body></html>"

Is it possible to load that string at runtime into an Iframe as if it was an HTML file?

This is for Construct 2. I have an object that can load HTML from a url fine, it can also insert HTML, and run scripts, but not as is.

Orthodox answered 2/8, 2016 at 21:58 Comment(3)
Yes with data uri, it's possible.Dutyfree
Unfortunately it looks like javascript will not work as I'm limited by the editor to what I can input into the script. I can add strings, just not properly formatted strings.Orthodox
See this answer which uses iframe.contentWindow.document.write("<html><body>Hello world</body></html>")Petrochemical
U
4

You can do it with

document.getElementById('iframe').src = "data:text/html;charset=utf-8," + escape(html);

See the following fiddle for an example

https://jsfiddle.net/erk1e3fg/

Ununa answered 2/8, 2016 at 22:16 Comment(0)
E
7

Sure, there are a couple of different options.

Via srcdoc (asyncronous):

iframe.srcdoc = html;

Via data URI (asyncronous):

iframe.src = 'data:text/html;charset=utf-8,' + escape(html);

Via document.write (syncronous, and works in really old browsers):

var idoc = iframe.contentWindow.document;
idoc.write(html);
idoc.close();
Enfeoff answered 2/8, 2016 at 22:53 Comment(2)
From where do you get that srcdoc & src is asyncronous?Petrochemical
@Petrochemical I'm not sure if it's technically specified somewhere that it must be either synchronous or asynchronous, but it has been my experience that srcdoc and src (even with a daraURI) are asynchronous.Colugo
U
4

You can do it with

document.getElementById('iframe').src = "data:text/html;charset=utf-8," + escape(html);

See the following fiddle for an example

https://jsfiddle.net/erk1e3fg/

Ununa answered 2/8, 2016 at 22:16 Comment(0)
D
3

With Data URI, (see browser support) it's possible. The format as described is

data:[<mime type>][;charset=<charset>][;base64],<encoded data>.

You might not need to base64 encode your string unless the string has specific characters. This Snippet fulfills your needs:

var iframe = document.getElementById('iframe'),
    htmlStr = "<html><body><h1>Hell World</h1></body></html>";
iframe.src = 'data:text/html,'+htmlStr;
<iframe id="iframe" src="blank:"></iframe>
Dutyfree answered 2/8, 2016 at 22:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.