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 :

Un target blank considéré comme un popup


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Un target blank considéré comme un popup
    Bonjour à tous,

    Je suis en train de créer une petite appli de top sites, mais comme je voulais que les liens externes vers les sites soient en dur, j'ai remplacé le traditionnel out.php?id=12 par une petite fonction JS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=\"www.un_site.com\" target=\"blank\" onClick=\"maj('".$id."');\""; // le lien
    ensuite la petite fonction qui recharge ma page (top_sites.php) pour ajouter un out au site pointé avec un bout de script php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function maj(id) {
      var new_url = "top_sites.php?id="+id+"";
      window.top.popup=0;
      window.top.location.replace(""+new_url+"");
       }
    Le résultat: le out est bien enregistré dans la table, puis le lien est suivi et le site pointé s'ouvre...mais le prob est qu'il est considéré par le navig comme un popup...et donc bloqué. Ca fonctionne OK si je désactive l'anti popup.
    Et je n'ai aucun souci sur les liens en target blank par ailleurs.
    Quelqu'un voit le loup ?
    Merci à lui.

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Je ne suis pas sur d'avoir saisie ce que tu veux faire voilà ce que j'ai compris

    lorsque on clique sur ton lien tu veux marquer en js quelquechose dans ta page et ouvrir le lien dans une autre.

    tu peux très bien utiliser en même temps le Js et le lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="test" target="_blank" onClick="mafonction_javascript()">A</a>
    <a href="test" target="_blank" onClick="mafonction_javascript(); return false;">B</a>
    <a href="test" target="_blank" onClick="mafonction_javascript(); return true;">C</a>
    le lien A active la fonction mafonction_javascript et c'est tout
    le lien B fait exactement la même chose
    le lien C active la fonction javascript et ensuite active le lien donc ouvre le lien en utilisant le target

    en javascript tout les gestionnaire d'évènement sont en fait des fonctions

    l'écriture du lien C coresponds en fait à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a href="test" target="_blank" id="monlien">D</a>
    <script>var mon_lien = document.getElementById('monlien').onclick = function () {
       mafonction_javascript(); 
       return true;
    }</script>
    le code de retour du gestionnaire conditionne la poursuite de la gestion de l'évènement. si le gestionnaire retourne true l'évènement est propagé et la fonctionnalité standard est activée. false bloque la propagation.

    j'ai pour habitude de toujour écrire mes gestionnaire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script>function mafonction_javascript () {
       // Code de ma fonction; 
       return true;
    }</script>
    <a href="test" target="_blank" onClick="return mafonction_javascript();">E</a>
    ainsi c'est ma fonction qui controle la suite des évènements
    par exemple sur un formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="monAction.php" method="POST" onSubmit="retrun verify();"
    ma fonction verify fait la vérification et retourne true ou false
    c'est le navigateur qui fait le submit au besoin pas besoin de faire un form.submit()

    A+JYT

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour et merci pour ces explications claires. Pour ma part j'ai utilisé le cas C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script>function maj(id) {
      var new_url = "top_sites.php?id="+id+"";
      window.top.popup=0;
      window.top.location.replace(""+new_url+"");
      return true;
      }
    </script>
     
    <a href="test" target="_blank" onClick="return maj('$id');">Lien</a>
    Mais le problème reste entier: la fonction JS rappelle bien la page sous forme de top_sites.php?id=5 ce qui me permet d'incrémenter la BDD, ensuite le vrai lien s'active...mais en étant considéré par IE comme un popup...donc bloqué.
    Et effectivement, si j'autorise les popups dans la GoogleBar, tout se passe bien. Est ce parce que la page est rafraîchie par la fonction JS sous forme de window.top.location.replace ?
    Je sèche...

  4. #4
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    La différence est que dans ton cas, c'est la fonction qui va activer le lien, et non le click de l'usagé.

    Il s'agit donc d'une opération non-manuelle que certains anti-popup doivent trouvé suspecte.

Discussions similaires

  1. [CLASSES] Attributs non-static apparemment considérés comme static ?
    Par Lideln dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 02/07/2006, 20h36
  2. [VB6]Formulaire se comportant comme un popup (InputBox)
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/05/2006, 18h33
  3. CloseHandle considéré comme une erreur par Memproof !
    Par benj63 dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/02/2006, 11h27
  4. [Lisp] Variable considérée comme une fonction
    Par lunart dans le forum Lisp
    Réponses: 2
    Dernier message: 07/04/2005, 15h48
  5. Button et target blank
    Par Canou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 26/10/2004, 17h26

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