Je travaille actuellement sur un formulaire qui inclut des entrées de fichiers pour télécharger des images. Il y a un onchange()
événement pour ces entrées qui soumet les images à un iframe
, puis charge dynamiquement les images téléchargées dans le formulaire, avec des champs à modifier pour elles (comme le nom et la géolocalisation ).
Comme je ne peux pas imbriquer les formulaires, le file_input
est également contenu dans un fichier iframe
. Au final, j'utilise un iframe
intérieur d'un autre iframe
. Alors j'ai quelque chose comme ça:
<form>
<!-- LOTS OF FIELDS!! -->
<iframe src="file_input_url">
<!-- iframe which loads a page of a form with a file input-->
</iframe>
</form>
et le HTML chargé dans le iframe
est quelque chose comme (à l'exclusion des balises html
, head
et body
)
<form target="upload_iframe">
<input type="file" onchange="this.form.submit()">
</form>
<iframe name="upload_iframe"></iframe>
Cela fonctionne très bien, à l'exception du fait qu'il faut quelques secondes pour charger le premier iframe
, de sorte que l'entrée de fichier ne se charge pas avec le reste de la page. Ce n'est pas visuellement idéal. Je pourrais le résoudre si je pouvais spécifier le iframe
contenu sans avoir à charger une autre page (spécifiée par file_input_url
dans la première iframe
).
Existe-t-il un moyen de spécifier le iframe
contenu dans le même document, ou ne peut-il être spécifié qu'avec l' src
attribut, nécessitant le chargement d'une autre page?
Réponses:
Vous pouvez
.write()
le contenu dans le document iframe. Exemple:<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>
la source
div
élément caché avec votre contenu et placez son contenuiframe
entre<body>
et</body>
.doc.write('<%= html.Replace("\\", "\\\\").Replace("'", "\\'") %>');
.iframe prend désormais en charge srcdoc qui peut être utilisé pour spécifier le contenu HTML de la page à afficher dans le cadre en ligne.
la source
Vous pouvez utiliser l'
data:
URL danssrc
: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>
Différence entre srcdoc = “…” et src = “data: text / html,…” dans une iframe .
Convertir du HTML en données: lien texte / html à l'aide de JavaScript .
la source
src
attribut peut être spécifié en ligne s'il est échappé, par exemple en utilisantrawurlencode
en PHP:<iframe src="<?php echo htmlspecialchars('data:text/html,' . rawurlencode($content)); ?>"></iframe>
srcdoc
, etsrcdoc
c'est la meilleure façon de le faire. Les URL de données ne sont largement prises en charge que pour les images et CSS - pour autant que je sache, aucune version d'Internet Explorer ne les prend en charge dans une iframe.En combinaison avec ce que Guffa a décrit, vous pouvez utiliser la technique décrite dans Explication de <script type = "text / template"> ... </script> pour stocker le document HTML dans un
script
élément spécial (voir le lien pour une explication sur comment cela fonctionne). C'est beaucoup plus facile que de stocker le document HTML dans une chaîne.la source
<html>
,<body>
,<script>
ne confondez pas seulement le navigateur, briser le rendu du document.<script>
balise serait ignoré par le navigateur. Merci de m'avoir corrigé!