IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Chargement d'un script dans un iFrame


Sujet :

JavaScript

Vue hybride

FrankOVD Chargement d'un script dans... 29/02/2012, 16h15
NoSmoking Bonjour, pourquoi ne pas... 29/02/2012, 18h52
FrankOVD En fait, le vrai fichier... 29/02/2012, 19h29
FrankOVD Solution trouvée! Elle réside... 29/02/2012, 22h21
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut Chargement d'un script dans un iFrame
    Bonjour,

    J''essaie de charger dynamiquement un script dans un document que j'ai chargé dans un iFrame. Malheureusement, il semble que ça ne fonctionne pas de la façon dont je m'y prends. J'ai créé ici trois petits fichiers qui permettent de recréer le problème, je code en JQuery mais il m'importe peu que la solution implique ou non du code JQuery.

    index1.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE html>
    <html>
      <head>
    		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    		<script type="text/javascript" src="script.js"></script>
    	</head>
    	<body>
    		<input type="button" value="Bouton #1" onclick="charger_iframe()">
    	<body>
    </html>
    index2.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <!DOCTYPE html>
    <html>
      <head>
    		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    	</head>
    	<body>
    		<input type="button" value="Bouton #2" onclick="faire_le_test()">
    	<body>
    </html>
    script.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function charger_iframe() {
    	var ifrm = $("<iframe>").attr("src","index2.html");
    	$(document.body).append(ifrm);
    	$(ifrm).load(function() {
    		var context = $("iframe").contents();
    		var headID = $("HEAD", context);
     
    		var newScript = $('<script>');
    		$(newScript).attr({"type":"text/javascript","src":"script.js"});
    		$(headID).append(newScript);
    		alert($(headID).html());
    	});
    }
     
    function faire_le_test() { alert("Ceci est un test"); }
    Quelqu'un peut m'aider à ce que je puisse correctement charger script.js dans index2.html à partir de index1.html afin que je puisse exécuter la fonction faire_le_test()?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    pourquoi ne pas mettre <script type="text/javascript" src="script.js"></script> dans ton fichier index2.html ?

  3. #3
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut
    En fait, le vrai fichier appelé dans le iFrame est en quelque sorte une coquille vide de mon application qui contient la vaste majorité de touts les appels de scripts et de styles. Lorsque je charge un module dans mon application, je charge alors le fichier script.js associé au module afin d'accéder aux méthodes de celui-ci, le fichier script.js est "déchargé" de mon application lorsque je sort du module. Chaque fichier script.js associé à un module déclare quelques fonctions qui ont toutes le même nom d'un fichier à l'autre afin de faciliter la gestion de mes modules par un même noyau, ces fichiers script.js ne peuvent donc pas être chargés simultanément pour cette raison.

    J'ai poussé mon application un peu plus loin en permettant de charger certains interfaces dans une fenêtre JQuery grâce un un plugin qui utilise l'objet iFrame pour procéder. Malheureusement, je n'arrive alors plus à charger les méthodes du module dans mon objet en raison du iFrame, ce qui rend jusqu'à maintenant ces fenêtres inutilisables.

    Je sais que je pourrais déclarer des objets pour chacun de mes modules et ainsi pouvoir charger tous mes fichiers javascript simultanément, mais ça ne m'a pas semblé justifié jusqu'ici et j'aimerais trouver comment charger un script dans un iFrame pour pouvoir continuer dans la voie que j'ai emprunté à moins que ce ne soit complètement impossible, et j'aimerais alors savoir pourquoi ce serait impossible par simple curiosité.

  4. #4
    Membre éclairé Avatar de FrankOVD
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2005
    Messages : 438
    Par défaut
    Solution trouvée! Elle réside en grande partie dans l'élimination presque totale du framework JQuery dans ma fonction javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function charger_iframe() {
    	var ifrm = $("<iframe>").attr("src","index2.html");
    	$(ifrm).load(function() {
    		var myIframe = $("iframe")[0];
    		var script = myIframe.contentWindow.document.createElement("script");
    		script.type = "text/javascript";
    		script.src = "script.js";
    		myIframe.contentWindow.document.body.appendChild(script);
    	});
    	$(document.body).append(ifrm);
    }
    Quand rien ne marche, rien ne vaut un bon retour aux sources pour éliminer des variables. Par expérience, JQuery et les iFrame n'ont jamais fait très bon ménage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chargement d'une page dans un IFRAME
    Par GérardMartinelli dans le forum jQuery
    Réponses: 6
    Dernier message: 07/03/2014, 09h23
  2. Intégrer un script dans un iFrame
    Par FrankOVD dans le forum jQuery
    Réponses: 1
    Dernier message: 20/07/2012, 14h24
  3. FrameKiller : Pb de chargement de pages dans une iframe
    Par olive_le_malin dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 28/05/2009, 15h32
  4. transfert d'un script qui est dans une iframe vers une autre page
    Par brunochp dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/03/2009, 16h14
  5. Attendre la fin du chargement de la page dans un WebBrowser
    Par core1 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 15/06/2003, 04h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo