Saat ini saya sedang mengerjakan formulir yang menyertakan beberapa input file untuk mengunggah gambar. Ada onchange()
acara untuk input yang mengirimkan gambar ke iframe
, kemudian secara dinamis memuat gambar yang diunggah ke dalam formulir, dengan bidang yang akan dimodifikasi untuk mereka (seperti nama dan geo-lokalisasi ).
Karena saya tidak bisa membuat sarang formulir, file_input
itu juga terkandung dalam file iframe
. Pada akhirnya saya menggunakan bagian iframe
dalam yang lain iframe
. Jadi saya punya sesuatu seperti ini:
<form>
<!-- LOTS OF FIELDS!! -->
<iframe src="file_input_url">
<!-- iframe which loads a page of a form with a file input-->
</iframe>
</form>
dan HTML yang dimuat ke dalam iframe
adalah sesuatu seperti (tidak termasuk tag html
, head
dan body
)
<form target="upload_iframe">
<input type="file" onchange="this.form.submit()">
</form>
<iframe name="upload_iframe"></iframe>
Ini berfungsi dengan baik, kecuali kenyataan bahwa dibutuhkan beberapa detik untuk memuat yang pertama iframe
, sehingga masukan file tidak dimuat dengan sisa halaman. Ini tidak ideal secara visual. Saya bisa menyelesaikannya jika saya bisa menentukan iframe
konten tanpa perlu memuat halaman lain (ditentukan oleh file_input_url
di pertama iframe
).
Adakah cara untuk menentukan iframe
konten dalam dokumen yang sama, atau dapatkah itu hanya ditentukan dengan src
atribut, yang memerlukan pemuatan halaman lain?
Jawaban:
Anda bisa
.write()
memasukkan isinya ke dalam dokumen iframe. Contoh:<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>
sumber
div
elemen tersembunyi dengan konten Anda dan tempatkan kontennya diiframe
antara<body>
dan</body>
.doc.write('<%= html.Replace("\\", "\\\\").Replace("'", "\\'") %>');
.iframe sekarang mendukung srcdoc yang dapat digunakan untuk menentukan konten HTML halaman yang akan ditampilkan dalam bingkai sebaris.
sumber
Anda dapat menggunakan
data:
URL disrc
: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>
Perbedaan antara srcdoc = “…” dan src = “data: text / html,…” dalam iframe .
Ubah HTML menjadi data: tautan teks / html menggunakan JavaScript .
sumber
src
atribut dapat ditentukan secara inline jika di-escape misalnya menggunakanrawurlencode
di PHP:<iframe src="<?php echo htmlspecialchars('data:text/html,' . rawurlencode($content)); ?>"></iframe>
srcdoc
, dansrcdoc
merupakan cara yang lebih baik untuk melakukannya. URL data hanya didukung secara luas untuk gambar dan CSS - sejauh yang saya tahu tidak ada versi Internet Explorer yang mendukungnya dalam iframe.Dalam kombinasi dengan apa yang dijelaskan Guffa, Anda dapat menggunakan teknik yang dijelaskan dalam Penjelasan <script type = "text / template"> ... </script> untuk menyimpan dokumen HTML dalam
script
elemen khusus (lihat tautan untuk penjelasan tentang bagaimana ini bekerja). Itu jauh lebih mudah daripada menyimpan dokumen HTML dalam sebuah string.sumber
<html>
,<body>
,<script>
hanya akan membingungkan browser, melanggar rendering dokumen.<script>
tag akan diabaikan oleh browser .. Terima kasih telah mengoreksi saya!