112 votes

Spécifier le contenu d'une iframe au lieu de l'attribut src d'une page

Je travaille actuellement sur un formulaire qui comprend des entrées de fichiers pour télécharger des images. Il y a un onchange() 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 nom y géolocalisation ).

Comme je ne peux pas imbriquer les formulaires, le file_input est également contenu dans un iframe . En fin de compte, j'utilise un iframe à l'intérieur d'un autre iframe . J'ai donc 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 code HTML chargé dans le fichier iframe est à peu près le suivant (à l'exclusion du html , head y body étiquettes)

<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 la première page. iframe de sorte que l'entrée du fichier ne se charge pas avec le reste de la page. Ce n'est pas idéal d'un point de vue visuel. Je pourrais résoudre ce problème en spécifiant l'option iframe sans avoir à charger une autre page (spécifiée par file_input_url dans le premier iframe ).

Existe-t-il un moyen de spécifier le iframe dans le même document, ou ne peut-elle être spécifiée qu'avec l'option src nécessitant le chargement d'une autre page ?

121voto

Guffa Points 308133

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>

55voto

Ayush Gupta Points 1043

L'iframe prend désormais en charge srcdoc qui peut être utilisée pour spécifier le contenu HTML de la page à afficher dans le cadre en ligne.

35voto

user Points 1438

Vous pouvez utiliser data: dans l'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>

Différence entre srcdoc=" " et src="data:text/html, " dans une iframe .

Convertir un lien HTML en data:text/html à l'aide de JavaScript .

6voto

ximo Points 70

En combinaison avec ce que Guffa a décrit, vous pouvez utiliser la technique décrite dans le document Explication de <script type = "text/template"> ... </script> pour stocker le document HTML dans un fichier script (voir le lien pour une explication du fonctionnement). C'est beaucoup plus facile que de stocker le document HTML dans une chaîne de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X