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 :

Alerte javascript directement dans un "href"


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut Alerte javascript directement dans un "href"
    Bonsoir, j'ai un petit problème avec ça (ce n'est qu'un exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href='javascript:alert("Votre prénom? Clément !");'>Afficher message</a>
    Ca parait très bête mais sous Safari 3 (sous Mac) tous les caractères accentués qui SUIVENT le caractère "?" sont transformés en caractère non reconnu (de même avec le caractère "#"). Sous FireFox: OK.
    La même chose dans un script javascript indépendant fonctionne mais, justement, je dois passer directement ce script dans le lien "href".

    Je trouve ça très bizarre, et vous ?
    PS: j'ai essayé d'encoder le "?" avec son équivalent ? mais en vain.
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    passe par l'octal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert('Votre Pr\u00E9nom')
    ??
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 60
    Par défaut
    Etant donné que seul Safari (AppleWebKit) ne fonctionne pas très bien, ça peut être interessant, la méthode suivante peut être interessante :

    tu crée une fonction init :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function init()
    	{
    		var text = "Votre prénom? Clément !";
    		var lien = document.getElementById('lien');
    		if(navigator.userAgent.indexOf('AppleWebKit/') > -1){
    			lien.setAttribute("href", "javascript:alert('"+encodeURI(text)+"')");
    			return
    			}
    		lien.setAttribute("href", "javascript:alert('"+text+"')");
    		}
    tu crée ton lien de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a id="lien" href="">une alerte</a>
    et dans ta balise tu indique la fonction "init" comme devant être appemée pour l'évènement "onload" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <body onload="init()">
    Voilà, ça prends quelques lignes mets ça marche maintenant quelque soit le navigateur.
    En plus tu as bien cette fois ci, la séparation entre la présentation et les fonctionnalités (sauf pour "onload").

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="alert('Votre prénom? Clément !');return false">Afficher message</a>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut Solution
    Citation Envoyé par SpaceFrog Voir le message
    passe par l'octal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert('Votre Pr\u00E9nom')
    C'est la voie de la solution !
    Utiliser l'octal (ou plutôt l'unicode apparemment). Mais là ça obligeait à encoder "bizarrement" tous les caractères accentués. Mais en cherchant et en trouvant (très difficilement) le codage du "?" en unicode (soit \u003F) ça marche parfaitement ! (et pour le # aussi)
    Voici le lien pour d'autres caractères en unicode (ajouté "\u" devant les valeurs fournies):
    http://alis.isoc.org/codage/iso10646/rang_00.htm

    mon script est donc devenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href='javascript:alert("prénom \u003F Clément");'>message avec Unicode</a>
    Remarque: une solution en utilisant l'encode utf-8 sur la page semble fonctionner aussi, mais obligeait à le dire à mySQL lors d'une interrogation de la base de données, et à convertir avec utf8_encode (en php) chaque texte qu'on saisissait dans sa page. Ce qui alourdissait terriblement.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ou tout simplement envoyer un header php charset utf-8
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut
    Désolé m.klaury mais ta solution ne fonctionne pas chez moi. Merci d'y avoir réfléchi !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut Solution 2
    Citation Envoyé par Bovino Voir le message
    Ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="alert('Votre prénom? Clément !');return false">Afficher message</a>
    Alors là, c'est trop fort !!!
    Ca marche aussi ! (et pas besoin de connaître l'unicode)
    Le fait de mettre "onclick" doit permettre au navigateur de se préparer à recevoir du texte de type javascript (car, comme je le disais, ça fonctionnait très bien dans un script à part en javascript).

    A moi de choisir la solution qui me plaît le + :
    Encodage unicode du "?" OU mettre href à "#" et ajouter onclick...

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    oui en fait je n'avais pas pensé à ça ...
    avec le onclick tu restes sur la page avec les paramètres de la page ...
    ne pas oublier le return false

    bien vu Beef
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut pourquoi un return false
    Citation Envoyé par SpaceFrog Voir le message
    oui en fait je n'avais pas pensé à ça ...
    avec le onclick tu restes sur la page avec les paramètres de la page ...
    ne pas oublier le return false

    bien vu Beef
    Pourquoi mettre un "return false" ? Je ne vois pas à quoi il servirait ici ! Y a t-il quelque-chose à savoir de ce côté là ?

    PS: Pour ce qui est du "header php charset utf-8": j'ai vu ça mais alourdi trop je pense.

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    bien sur que le return false à toute son importance, il inhibe le href, parce que pour certains navigateurs un href="#" cause un rechargement de page.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Par défaut ah oui !
    Citation Envoyé par SpaceFrog Voir le message
    bien sur que le return false à toute son importance, il inhibe le href, parce que pour certains navigateurs un href="#" cause un rechargement de page.
    Ah oui?!! je n'avais pas remarqué ça ! (sous FireFox Mac par exemple)
    merci.

    Au fait, même si pas de bug chez moi, je suppose qu'il manque le ";" à la fin de "return false". Donc le code exact est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="alert('Votre prénom? Clément !');return false;">Afficher message</a>

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Au fait, même si pas de bug chez moi, je suppose qu'il manque le ";" à la fin de "return false".
    En fait, javascript est relativement tolérant en ce qui concerne les fins d'instructions.
    De mémoire, il me semble qu'il rajoute de lui-même les ; en fin de ligne.
    Cela peut être piégeux dans certains cas donc ta proposition est plus rigoureuse (et donc à encourager) mais les deux sont correctes.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/04/2005, 14h22

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