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

Autres langages pour le Web Discussion :

[XUL/JS] Tester le chargement complet d'une page avec frames


Sujet :

Autres langages pour le Web

  1. #1
    Membre régulier Avatar de Mr Pink Eyes
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Points : 119
    Points
    119
    Par défaut [XUL/JS] Tester le chargement complet d'une page avec frames
    Bonjour,

    Je développe une extension pour Firefox ayant pour but (entre autre) d'inspecter les frames éventuellement contenues dans la page affichée dans le Browser. En temps normal ça marche très bien lorsque je clique sur l'onglet qui contient la page avec frames mais pas lors de son premier chargement. Je suppose que c'est du au fait que la fonction est lancée avant que la page est fini de charger.

    Du coup j'aurais voulu savoir comment tester si la page est chargée. J'ai testé avec DOMContentLoaded mais ça ne semble pas marcher.

    Je ne sais pas si je suis très clair alors n'hésitez pas à poser des questions.

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Bonjour,

    et DOMFrameContentLoaded ?
    Cordialement,
    Christophe Charron

  3. #3
    Membre régulier Avatar de Mr Pink Eyes
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Points : 119
    Points
    119
    Par défaut
    J'étais passé à coté de cet event!!!

    Merci beaucoup en tout cas! ça marche impeccablement du coup!

    EDIT : ça marche quand la page est rechargée via la restauration de session (ce qui n'était pas le cas avant) mais pas quand je charge pour la première fois la page en rentrant son URL dans la barre d'adresse...

    Je mets un bout de code pour expliquer grosso-modo comment je gère ça :
    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    var myExt_urlBarListener = {
      QueryInterface: function(aIID)
      {
       if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
           aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
           aIID.equals(Components.interfaces.nsISupports))
         return this;
       throw Components.results.NS_NOINTERFACE;
      },
     
      onLocationChange: function(aProgress, aRequest, aURI)
      {
    	if(window.content.document.location!='about:blank'){
    	    myExtension.processNewURL(aURI);
    	}
      },
     
      onStateChange: function() {},
      onProgressChange: function() {},
      onStatusChange: function() {},
      onSecurityChange: function() {},
      onLinkIconAvailable: function() {}
    };
     
    var myExtension = {
    oldURL: null,
     
      init: function() {
        // Scrutateur pour les chargements de pages Web
        gBrowser.addProgressListener(myExt_urlBarListener,
            Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
      },
     
        inspectDOM: function(usedURI){
    		var frames = window.content.document.getElementsByTagName("frame");
    		var nbDanger = 0;
     
    		var frameButton = document.getElementById("PishBar-Frame-Button")
     
    		// create a global history object in JS
    		var hist = 
    		  Components.classes["@mozilla.org/browser/global-history;2"].getService(Components.interfaces.nsIGlobalHistory2);
    		  // create an IO Service in JS
    		var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
     
     
    		var i=0;
    		for(i=0; i<frames.length; i++){
    			var source=frames.item(i).getAttribute("src");
     
    			if(source.charAt(0)=='.'){
    				var URIpath = usedURI.spec.substr(0,usedURI.spec.lastIndexOf('/'));
    				var pageSource = source.substr(source.indexOf('/'));
    				source = URIpath+pageSource;
    			}
     
    			var bURI=ioService.newURI(source,null,null);
    			if((frames.item(i).baseURIObject.host != bURI.host)||(frames.item(i).contentDocument.getElementsByTagName("frame").length>0)){
    				nbDanger++;
    			}
    		}
    		//alert("id =" + frameButton.id +" value=" + frameButton.test);
     
    		if (nbDanger>0){
    			nbDanger--; // because the first frame that belongs to the good domain name is also counted
    			frameButton.style.listStyleImage="url(\"chrome://phishbar/skin/Frame/stop_16.png\")";
    			frameButton.style.fontWeight="bolder";
    			frameButton.style.color="red";
    			frameButton.label=nbDanger + " suspicous element(s)";
    		}
    		else{
    			frameButton.style.listStyleImage="url(\"chrome://phishbar/skin/Frame/22.png\")";
    			frameButton.style.fontWeight="normal";
    			frameButton.style.color="green";
    			frameButton.label="Structure is ok";
    		}
        },
     
      processNewURL: function(usedURI) {
     
    	  if (usedURI.host!= this.oldURL){
    		    // maintenant, nous savons que l'url est nouvelle...
    		    this.oldURL = usedURI.host;
    		  this.inspectDOM(usedURI);
    	  }
      },
     
    };
     
    window.addEventListener("DOMFrameContentLoaded", function() {myExtension.init()}, false);

    Voilà...

  4. #4
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Heu, alors pas d'idée car je ne vois pas trop comment s'architecture l'ensemble.
    Quand tu dis "ne fonctionne pas" c'est une exception JS ? Dans quel environnement es-tu ?
    Cordialement,
    Christophe Charron

  5. #5
    Membre régulier Avatar de Mr Pink Eyes
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Points : 119
    Points
    119
    Par défaut
    Et bien en fait, je pense que le problème vient du onLocationChange qui est appelé lorsque je change de page. Du coup il n'attends pas la fin du chargement pour lancer l'appel à la méthode suivante et la console d'erreur de FireFox me retourne Erreur*: Permission refusée d'appeler la méthode Location.toString.

    Après je sais pas trop ce que tu entends par environnement... mais si ça aide : Mozilla 5.0
    Windows XP Pro
    Firefox 3.0b5

  6. #6
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    J'imagine que tu as lu cela http://developer.mozilla.org/fr/docs...&printable=yes
    Comme dans ton exemple, je ne vois pas la gestion du onStateChange ??
    Et on dirait qu'ici http://groups.google.com/group/mozil...61196fdc2cf01d, quelqu'un a un problème similaire (sur le premier chargement). Peut-être le contacter ??
    Cordialement,
    Christophe Charron

  7. #7
    Membre régulier Avatar de Mr Pink Eyes
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par Christophe Charron Voir le message
    Oui, je m'en suis même largement inspiré
    Citation Envoyé par Christophe Charron Voir le message
    Et on dirait qu'ici http://groups.google.com/group/mozil...61196fdc2cf01d, quelqu'un a un problème similaire (sur le premier chargement). Peut-être le contacter ??
    J'avais déjà lu ce thread aussi mais il est vrai que je n'ai pas pensé à écrire à l'auteur...

    Quoiqu'il en soit, j'ai réussi à le faire marcher. Maintenant je ne suis pas sur que ce soit la méthode la plus élégante qui soit mais bon... En fait j'ai juste modifié les EventListeners :

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    window.addEventListener("load", function() {myExtension.init()}, false);
    window.addEventListener("DOMFrameContentLoaded", function() {myExtension.inspectDOM()}, false);

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

Discussions similaires

  1. Gestion de plusieurs applications sur une page avec Frame
    Par Benjea dans le forum Webdesign & Ergonomie
    Réponses: 0
    Dernier message: 27/09/2012, 22h26
  2. Attendre le chargement complet d'une iFrame
    Par ToxiK dans le forum jQuery
    Réponses: 8
    Dernier message: 13/01/2010, 21h23
  3. Passer d'une page avec frame a une sans.
    Par zivai dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/03/2009, 10h10
  4. image d'attente avant chargement complet d'une page
    Par kamclasse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 31/01/2009, 14h00
  5. [Prototype] Patienter durant chargement complet d'une image (AJAX)
    Par Sebastos dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 24/01/2008, 13h26

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