Загрузка строки, если HTML в iframe с использованием JavaScript

У меня есть строка тегов HTML, которую я могу добавлять или изменять, когда захочу.

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

Можно ли загрузить эту строку во время выполнения в Iframe, как если бы это был файл HTML?

Это для Construct 2. У меня есть объект, который может нормально загружать HTML из URL-адреса, он также может вставлять HTML и запускать сценарии, но не как есть.


person Mr newt    schedule 02.08.2016    source источник
comment
Да, с данными uri, это возможно.   -  person Adam Azad    schedule 03.08.2016
comment
К сожалению, похоже, что javascript не будет работать, так как редактор ограничивает меня тем, что я могу вводить в скрипт. Я могу добавлять строки, просто неправильно отформатированные строки.   -  person Mr newt    schedule 03.08.2016
comment
См. этот ответ, в котором используется iframe.contentWindow.document.write("<html><body>Hello world</body></html>")   -  person stomy    schedule 19.06.2019


Ответы (3)


Вы можете сделать это с

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

См. следующую скрипку для примера

https://jsfiddle.net/erk1e3fg/

person Hacktisch    schedule 02.08.2016

Конечно, есть несколько разных вариантов.

Через srcdoc (асинхронно):

iframe.srcdoc = html;

Через URI данных (асинхронно):

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

Через document.write (синхронно и работает в очень старых браузерах):

var idoc = iframe.contentWindow.document;
idoc.write(html);
idoc.close();
person Alexander O'Mara    schedule 02.08.2016
comment
Откуда вы взяли, что srcdoc & src асинхронно? - person stomy; 19.06.2019
comment
@stomy Я не уверен, что где-то технически указано, что он должен быть либо синхронным, либо асинхронным, но по моему опыту srcdoc и src (даже с daraURI) являются асинхронными. - person Alexander O'Mara; 20.06.2019

С URI данных, (см. поддержку браузера), это возможно. Формат, как описано,

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

Возможно, вам не потребуется кодировать строку base64, если в строке нет определенных символов. Этот фрагмент удовлетворит ваши потребности:

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>

person Adam Azad    schedule 02.08.2016