Подтвердить что ты не робот

Задание содержимого iframe вместо src на страницу

В настоящее время я работаю над формой, которая помимо всех нормальных полей формы также содержит файлы для загрузки изображений, которые onchange отправляет изображение в iframe, а затем динамически загружает загруженное изображение в форму с полями для их изменения (например, имя и геолокализация). Поскольку я не могу встраивать формы, file_input также содержится в iframe, поэтому в конце я использую iframe внутри iframe. Итак, схематически, у меня есть что-то вроде этого:

<form>
<!-- LOTS OF FIELDS!! -->
<iframe src="file_input_url">
<!-- iframe which loads a page of a form with a file input-->
</iframe>
</form>

а html, загруженный в iframe, - это что-то вроде (игнорируя теги html, head и body)

<form target="upload_iframe">
<input type="file" onchange="this.form.submit()">
</form>
<iframe name="upload_iframe"></iframe>

Это отлично работает, за исключением того, что загрузка первого iframe занимает пару секунд, поэтому входной файл не загружается с остальной частью страницы и визуально не идеален. Я мог бы решить эту проблему, если бы можно было указать содержимое iframe без необходимости загрузки другой страницы (указанной в файле "file_input_url" в первом iframe).

Итак, мой вопрос заключается в том, есть ли способ указать содержимое iframe в том же документе или его можно специфицировать только с атрибутом src, поэтому требуется загрузка другой страницы?

4b9b3361

Ответ 1

Вы можете записать содержимое в документ iframe. Пример:

<iframe id="FileFrame" src="about:blank"></iframe>
<script type="text/javascript">
var doc = document.getElementById('FileFrame').contentWindow.document;
doc.open();
doc.write('<html><head><title></title></head><body>Hello world.</body></html>');
doc.close();
</script>

Ответ 2

iframe теперь поддерживает srcdoc, который можно использовать для указания содержимого HTML на странице для отображения во встроенном кадре.

Ответ 3

Вы можете использовать data: URL-адрес в src:

var html = 'Hello from <img src="http://stackoverflow.com/favicon.ico" alt="SO">';
var iframe = document.querySelector('iframe');
iframe.src = 'data:text/html,' + encodeURIComponent(html);
<iframe></iframe>

Ответ 4

В сочетании с тем, что описал Гуффа, вы можете использовать технику, описанную в Объяснение < script type = "text/template" → → ... </script> для хранения документа HTML в специальном элементе script (см. ссылку для объяснения того, как это работает). Это намного проще, чем хранить HTML-документ в строке.