Ich arbeite derzeit an einem Formular, das einige Dateieingaben zum Hochladen von Bildern enthält. onchange()
Für diese Eingaben gibt es ein Ereignis, bei dem die Bilder an ein iframe
gesendet und dann die hochgeladenen Bilder dynamisch in das Formular geladen werden, wobei Felder für sie geändert werden müssen (wie Name und Geolokalisierung ).
Da ich Formulare nicht verschachteln kann, file_input
ist das auch in einem enthalten iframe
. Am Ende benutze ich ein iframe
Inneres eines anderen iframe
. Also habe ich so etwas:
<form>
<!-- LOTS OF FIELDS!! -->
<iframe src="file_input_url">
<!-- iframe which loads a page of a form with a file input-->
</iframe>
</form>
und das HTML geladen in dem iframe
ist so etwas wie ( mit Ausnahme der html
, head
und body
Tags)
<form target="upload_iframe">
<input type="file" onchange="this.form.submit()">
</form>
<iframe name="upload_iframe"></iframe>
Dies funktioniert hervorragend, mit Ausnahme der Tatsache, dass das Laden des ersten einige Sekunden dauert iframe
, sodass die Dateieingabe nicht mit dem Rest der Seite geladen wird. Dies ist optisch nicht ideal. Ich könnte es lösen, wenn ich den iframe
Inhalt angeben könnte, ohne eine andere Seite laden zu müssen (angegeben durch file_input_url
in der ersten iframe
).
Gibt es eine Möglichkeit, den iframe
Inhalt im selben Dokument anzugeben , oder kann er nur mit dem src
Attribut angegeben werden, das das Laden einer anderen Seite erfordert?
Antworten:
Sie können
.write()
den Inhalt in das Iframe-Dokument einfügen. Beispiel:quelle
div
erstellen Sie mit Ihrem Inhalt ein verstecktes Element und platzieren Sie den Inhaltiframe
zwischen<body>
und</body>
.doc.write('<%= html.Replace("\\", "\\\\").Replace("'", "\\'") %>');
.iframe unterstützt jetzt srcdoc, mit dem der HTML-Inhalt der Seite angegeben werden kann, die im Inline-Frame angezeigt werden soll.
quelle
Sie können die
data:
URL verwenden insrc
:Unterschied zwischen srcdoc = "..." und src = "data: text / html, ..." in einem Iframe .
Konvertieren Sie HTML in Daten: Text / HTML-Link mit JavaScript .
quelle
src
Attribut kann inline angegeben werden, wenn es maskiert wird, z. B.rawurlencode
in PHP:<iframe src="<?php echo htmlspecialchars('data:text/html,' . rawurlencode($content)); ?>"></iframe>
srcdoc
, und diessrcdoc
ist der bessere Weg, dies zu tun. Daten-URLs werden nur für Bilder und CSS weitgehend unterstützt - meines Wissens unterstützt keine Version von Internet Explorer sie in einem Iframe.In Kombination mit dem, was Guffa beschrieben hat, können Sie die unter Erläuterung von <script type = "text / template"> ... </ script> beschriebene Technik verwenden , um das HTML-Dokument in einem speziellen
script
Element zu speichern (eine Erläuterung finden Sie unter dem Link wie das funktioniert). Das ist viel einfacher als das Speichern des HTML-Dokuments in einer Zeichenfolge.quelle
<html>
,<body>
,<script>
würden verwirren nur den Browser, das Rendern des Dokuments zu brechen.<script>
Tag vom Browser ignoriert wird. Danke, dass Sie mich korrigiert haben!