Obecnie pracuję nad formularzem, który zawiera dane wejściowe do plików do przesyłania zdjęć. onchange()
Dla tych danych wejściowych istnieje zdarzenie, które przesyła obrazy do pliku iframe
, a następnie dynamicznie ładuje przesłane obrazy do formularza, z polami, które mają być dla nich zmodyfikowane (takie jak nazwa i lokalizacja geograficzna ).
Ponieważ nie mogę zagnieżdżać form, file_input
plik jest również zawarty w pliku iframe
. W końcu używam iframe
wnętrza innego iframe
. Więc mam coś takiego:
<form>
<!-- LOTS OF FIELDS!! -->
<iframe src="file_input_url">
<!-- iframe which loads a page of a form with a file input-->
</iframe>
</form>
HTML i ładowane do iframe
jest coś takiego (z wyłączeniem html
, head
a body
tagi)
<form target="upload_iframe">
<input type="file" onchange="this.form.submit()">
</form>
<iframe name="upload_iframe"></iframe>
Działa to świetnie, z wyjątkiem faktu, że załadowanie pierwszego zajmuje kilka sekund iframe
, więc plik wejściowy nie ładuje się wraz z resztą strony. Nie jest to wizualnie idealne. Mógłbym to rozwiązać, gdybym mógł określić iframe
treść bez konieczności ładowania innej strony (określonej przez file_input_url
w pierwszej iframe
).
Czy istnieje sposób określenia iframe
treści w tym samym dokumencie, czy też można ją określić tylko za pomocą src
atrybutu, co wymaga załadowania innej strony?
Odpowiedzi:
Możesz
.write()
zawartość w dokumencie iframe. Przykład:<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>
źródło
div
element z zawartością i umieść jego zawartośćiframe
pomiędzy<body>
i</body>
.doc.write('<%= html.Replace("\\", "\\\\").Replace("'", "\\'") %>');
.iframe obsługuje teraz srcdoc, którego można użyć do określenia zawartości HTML strony, która ma być wyświetlana w ramce wbudowanej.
źródło
Możesz użyć
data:
adresu URL wsrc
: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>
Różnica między srcdoc = „…” i src = „data: text / html,…” w ramce iframe .
Konwertuj HTML na dane: link tekst / html za pomocą JavaScript .
źródło
src
atrybut można podać w tekście, jeśli zostanie zmieniony, np. Używającrawurlencode
w PHP:<iframe src="<?php echo htmlspecialchars('data:text/html,' . rawurlencode($content)); ?>"></iframe>
srcdoc
, isrcdoc
jest to lepszy sposób na zrobienie tego. Adresy URL danych są szeroko obsługiwane tylko w przypadku obrazów i CSS - o ile wiem, żadna wersja Internet Explorera nie obsługuje ich w ramkach iframe.W połączeniu z tym, co opisał Guffa, możesz użyć techniki opisanej w Wyjaśnieniu <script type = "text / template"> ... </script>, aby zapisać dokument HTML w specjalnym
script
elemencie (zobacz link do wyjaśnienia jak to działa). To dużo łatwiejsze niż przechowywanie dokumentu HTML w łańcuchu.źródło
<html>
,<body>
,<script>
by zmylić tylko przeglądarkę, łamiąc renderowania dokumentu.<script>
tagu zostanie zignorowane przez przeglądarkę. Dzięki za poprawienie mnie!