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 :

Perte de handle d'une fenetre d'une méthode à l'autre


Sujet :

JavaScript

  1. #1
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut Perte de handle d'une fenetre d'une méthode à l'autre
    Bonjour

    soit le code ci-dessous qui me permet de faire rebondir une fenetre sur les bords de l'écran

    Dans la méthode démarrer j'ai bien un object window après mon window.open (contrôlé avec alert)

    Dans la méthode deplacementSuivant j'ai mis une alert pour voir la valeur de fenetre qui vaut undefined à l'execution !?!

    Comment cela se fait-il ? J'ai perdu la valeur de mon attribut récupéré auparavant avec window.open ?

    Si quelqu'un pouvait m'expliquer gentillement se serait sympa car j'avoue ne pas comprendre la logique de javascript là du coup...

    Merci d'avance.




    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
    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
    91
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
     
    <head> 
    	<title>PAGE PRINCIPALE</title>
    	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    	<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">	
     
     
     
    <script type="text/javascript">
     
     
    function rebond() {
    	this.x=0;
    	this.y=0;
    	this.w=200;
    	this.h=200;
    	this.dx=5;
    	this.dy=5;
    	this.intervalle=100;
    	this.fenetre=null;
    	this.minuterie=null;
     
     
    	this.demarrer = function () { 
     
    		this.x = (screen.width - this.w)/2;
    		this.y = (screen.height - this.h)/2;
     
    		this.fenetre= window.open('javascript:"<h1>REBOND !</h1>"',"",
    		"left=" + this.x + ",top="+this.y+ ", width="+this.w + ",height="+this.h+",status=yes");
     
     
    		this.minuterie= setInterval( this.deplacementSuivant, 100 );  
     
     
    	}
     
     
    	this.arreter=function() {
     
    		clearInterval(this.minuterie);
    		if(!this.fenetre.closed)
    			this.fenetre.close();
    	}
     
     
     
    	this.deplacementSuivant = function(){
     
    		alert("alert deplacement "+this.fenetre);
     
    		if(!this.fenetre)
    			if(this.fenetre.closed){
    				clearInterval(this.minuterie);
    				return;
    			}
     
    		if((this.x+this.dx>(screen.availWidth -this.w)) ||
    			(this.x+this.dx<0))
    			 this.dx=-this.dx;
     
    			if((this.y+this.dy>(screen.availHeigth -this.h)) ||
    			(this.y+this.dy<0)) this.dy=-this.dy;
     
    			this.x+=this.dx;
    			this.y+=this.dy;
     
    			this.fenetre.moveTo(this.x, this.y);
     
    			this.fenetre.defaultStatus="("+this.x+","+this.y+")";
    	}
     
     
    }
     
    </script>
     
    </head>
     
    <body>
     
    	<script>
    		var my = new rebond();
    		my.demarrer();	
     
    		delete my;
     
    	</script>
    </body>
    </html>
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    l'objet "this" est contextuel : il faut stocker le handle dans une variable locale, non ?

    EDIT : puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    varGlobale = this.fenetre;
    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    this.minuterie = setInterval( 
                                     function(ctx){
                                          return function(){
                                                 ctx.deplacementSuivant.apply(ctx)
                                           }
                                       }(this), 
                                       100 
                                  );
    Sinon, quand tu appelles ton setInterval, tu perds le contexte d'exécution de ta fonction (ton this ne correspond plus a l'objet rebond mais a l'objet window)

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2012, 17h56
  2. transmettre une variable d'une fenetre a une autre
    Par tix116 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/02/2009, 10h07
  3. insertion d'une fenetre dans une fenetre
    Par DeeVoiD dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/02/2009, 12h56
  4. Problème affichage d'une fenetre dans une fenetre
    Par zuzuu dans le forum Windows
    Réponses: 10
    Dernier message: 03/10/2007, 15h26
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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