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 :

self et top


Sujet :

JavaScript

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut self et top
    Bonjour,

    Je souhaite rediriger les internautes vers F1.php dès le moment que je ne me trouve pas dans une frame et que le fichier appelant est différent de F1.php
    Ceci étant, l'exécution de mon script PHP ci-dessous ne fait rien.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <html>
    <head>
    <body>
    <?php
    	$FichierSource = $_SERVER['HTTP_REFERER'];
    	$FichierCible = "F1.php";
    	echo "<script language=\"JavaScript\" type=\"text/JavaScript\">";
    	echo "if(self==top && ".$FichierSource." != $FichierCible;)";
    	echo "{";
    	echo "top.location.href=\".$FichierCible.\"}";
    	echo "</script>";
    ?>
    </body>
    </html>

    Je me doute bien qu'il y a au moins une erreur mais je sèche.
    Merci d'avance pour vos remarques.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que le javascript que tu obtiens est bien celui que tu veux ?
    Si oui, c'est une question Javascript pas PHP.

  3. #3
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut PHP et javascript
    Bonjour (et merci Sabotage)

    Je viens de modifier légèrement mon code ainsi:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <html>
    <head>
    <body>
    <?php
    	$FichierSource = $_SERVER['HTTP_REFERER'];
    	$FichierCible = "F1.php";
    	echo "<script language=\"JavaScript\" type=\"text/JavaScript\">";
    	echo "if(self==top && ".$FichierSource." != $FichierCible;)";
    	echo "{";
    	echo "top.location.href=\".$FichierCible.\"}";
    	echo "</script>";
    ?>
    </body>
    </html>


    Du coup, le code généré est le suivant :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html>
    <head>
    <body>
    <script language="JavaScript" type="text/JavaScript">if(self==top && MonFichierSource.php != MonFichierCible.php){top.location.href="MonFichierCible.php"}</script></body>
    </html>

    Je pense (sans doute à tort) qu'il est bon mais constate qu'il devrait renvoyer vers MonFichierCible.php alors qu'il ne se passe rien. Si je te suis bien, l'erreur viendrait du javascript mais je ne la vois pas.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 110
    Points : 44 929
    Points
    44 929
    Par défaut
    Bonjour,
    il te manque des double quotte autour de tes chaines MonFichierSource.php et MonFichierCible.php pour obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (self == top && "MonFichierSource.php" != "MonFichierCible.php") {
      top.location.href = "MonFichierCible.php"
    }

  5. #5
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Mai 2007
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2007
    Messages : 482
    Points : 193
    Points
    193
    Par défaut
    Effectivement, je viens juste de m'en rendre compte et j'allais le signaler.
    Merci à tous ceux qui se sont penchés sur mon problème.

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Quelques précisions :
    • Tu peux retirer language="javascript", c'est un attribut obsolète.
    • En PHP, tu le sais déjà, on peut inclure une variable dans une chaîne ou bien faire une concaténation. Là tu fais les deux sur la même ligne :
      Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
      echo "if(self==top && ".$FichierSource." != $FichierCible;)";
      C'est pas super clair, et je pense que c'est à cause de ça que tu t'es embrouillé avec les guillemets.
      Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
      echo "if(self==top && '$FichierSource' != '$FichierCible')";
    • Aie le réflexe d'utiliser les guillemets simples (') plutôt que les guillemets doubles (") quand il n'y a pas de variable PHP dans la chaîne. Ça simplifie souvent la syntaxe et c'est une optimisation facile à faire.
    • Juste une possibilité de faire autrement : puisque $fichierSource et $fichierCible sont tous deux connus à l'exécution du script PHP, tu peux faire le test directement en PHP, et envoyer moins de code JavaScript dans le cas favorable.
      Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      <?php
         $FichierSource = $_SERVER['HTTP_REFERER'];
         $FichierCible = "F1.php";
         echo '<script type="text/JavaScript">';
         if ($FichierSource !== $FichierCible) {
            echo 'if (self === top) { ';
            echo "top.location.href = '$FichierCible'; ";
            echo '}';
         }
         echo '</script>';
      ?>
    • Pour contrôler l'inclusions de ta page dans un frame ou iframe, il existe depuis quelques années l'en-tête HTTP X-Frame-Options (je n'ai pas trouvé de source suffisamment bonne en français, désolé). Tu peux l'envoyer avec la fonction PHP header. Cette solution a l'avantage de fonctionner (si le navigateur est compatible) quand JavaScript est désactivé.

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

Discussions similaires

  1. empêcher top.location.href=self.location.href
    Par cordobal74 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/01/2006, 09h15
  2. Requetes TOP/BOTTOM
    Par bilbon.S dans le forum Requêtes
    Réponses: 7
    Dernier message: 21/04/2004, 12h30
  3. MessageBox always on top
    Par Ingham dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/04/2004, 13h44
  4. ASM + DELPHI ... soucis ... mais top intéressant !
    Par - Robby - dans le forum Langage
    Réponses: 9
    Dernier message: 21/11/2003, 15h58
  5. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32

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