Page 1 sur 2

[Résolu] Fonction "Add to Favorites"

Publié : 06 mars 2006, 19:28
par lordbdp
Bonjour à tous et à toutes.

Actuellement j'utilise ce script pour ajouter aux Favoris, mais il ne marche pas sous Firefox. Comment faire ?

Code : Tout sélectionner

<script language="JavaScript">
var txt = "Cette page en favoris !"
var url = this.location;
var who = document.title;
var ver = navigator.appName
var num = parseInt(navigator.appVersion)
if ((ver == "Microsoft Internet Explorer")&&(num >= 4)) {
   document.write('<A HREF="javascript:window.external.AddFavorite(url,who);" class="downlinks" ');
   document.write('onMouseOver=" window.status=')
   document.write("txt; return true ")
   document.write('"onMouseOut=" window.status=')
   document.write("' '; return true ")
   document.write('">'+ txt + '</a>')
}else{
   txt += "  (Ctrl+D)"
   document.write(txt)
} 
                  </script>
Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

Publié : 06 mars 2006, 20:43
par calimo
Déjà, ne jamais détecter un navigateur par son nom : toujours par ses capacités

Au lieu de

Code : Tout sélectionner

if ((ver == "Microsoft Internet Explorer")&&(num >= 4))
tu mets

Code : Tout sélectionner

if(window.external.AddFavorite)
en plus c'est plus court :wink:

Ensuite, il n'y a pas de script pour ajouter aux marque-pages, donc il faut faire Ctrl+D :wink:

Publié : 06 mars 2006, 22:15
par lordbdp
Merci Calimo pour la correction. Mais sommes-nous toujours obligé de proposer une Ctrl+D ? N'y a-t-il pas de solution pour proposer une mise en favoris sans combinaison clavier ni autres bidouilles ?

Publié : 06 mars 2006, 22:19
par calimo
lordbdp a écrit :Mais sommes-nous toujours obligé de proposer une Ctrl+D ?
Oui.
lordbdp a écrit :N'y a-t-il pas de solution pour proposer une mise en favoris sans combinaison clavier ni autres bidouilles ?
Non-

Pas de mirâcles aujourd'hui :wink:

Publié : 06 mars 2006, 22:26
par lordbdp
Zut ! Moi qui croyais en Boudha... Mdr.

Merci quand-même pour l'info. :wink:

Publié : 06 mars 2006, 22:36
par lordbdp
J'ai fait un test avec ton code et le texte ne s'affiche plus...
Je suis obligé de laisser le code comme avant ta modification sinon y'a plus rien de visible à son emplacement.

Publié : 07 mars 2006, 09:12
par SB
Essaie

Code : Tout sélectionner

if (document.all && !window.opera) {
Ça devrait fonctionner avec FF, IE, Opera mais il faudrait tester avec d'autres navigateurs.

Publié : 07 mars 2006, 11:24
par calimo
Hum... de nouveau on teste des capacités qui n'ont rien à voir avec la fonction voulue, donc on s'expose à certains risques, et à ce niveau alors autant garder la détection de navigateur.

Effectivement ça ne fonctionne pas, mais je ne sais pas pourquoi. Peut-être que le problème vient de la syntaxe ? Il manque plein de ";" dans ton code, je ne sais pas comment ça pouvait marcher avant :roll:

Publié : 07 mars 2006, 11:56
par martin
Je suis d'accord avec Calimo.
essaie :

Code : Tout sélectionner

<script language="JavaScript">
var txt = "Cette page en favoris !";
var url = this.location;
var who = document.title;
if (window.external) {
   document.write('<A HREF="javascript:window.external.AddFavorite(url,who);" class="downlinks" ');
   document.write('onMouseOver=" window.status=');
   document.write("txt; return true ");
   document.write('"onMouseOut=" window.status=');
   document.write("' '; return true ");
   document.write('">'+ txt + '</a>');
}else{
   txt += "  (Ctrl+D)";
   document.write(txt);
}
</script>
Le test doit être suffisant. Je ne sais pas pourquoi on ne peut pas tester la méthode, et j'ai pas envie de chercher.

pour les ";", c'est autorisé par javascript, le retour à la ligne termine l'instruction, mais je trouve plus propre avec.

Publié : 07 mars 2006, 17:52
par lordbdp
Bon, j'utilise le code de Martin car ç'est nickel avec.


Quelles différences entre :

Code : Tout sélectionner

if ((ver == "Microsoft Internet Explorer")&&(num >= 4))

Code : Tout sélectionner

if (document.all && !window.opera)

Code : Tout sélectionner

if (window.external)

Vu que j'y connais rien en programmation... :lol:

Publié : 07 mars 2006, 19:20
par martin
1 : tu testes le nom du navigateur, tu vérifies que ce nom est "Microsoft Internet Explorer", et que sa version est supérieure à 4.

2 : tu testes que le navigateur connait l'objet "document.all" (inventé par MS, donc pas forcément connus d'autres navigateurs), et qu'il ne connait pas l'objet "window.opera" (visiblement propriétaire Opera, et donc sûrement pas connus de IE, mais par moi non plus).

3 : tu testes l'existence de l'objet "window.external" dont tu vas te servir d'une méthode.


Le plus facile à gérer et le plus cohérent, c'est de tester si un objet ou une méthode (une "fonction" si tu veux) existe avant de s'en servir, plutôt que d'essayer de trouver le navigateur actuel et sa version par d'autres moyens, pour trouver si il peut utiliser cette fonction, car tu as vite fait de rallonger les tests à n'en plus finir, et les versions peuvent changer, et tu ne prévois pas forcément tous les navigateurs existants.

Publié : 07 mars 2006, 19:23
par epsy
salut,
SB a écrit :Essaie

Code : Tout sélectionner

if (document.all && !window.opera) {
Ça devrait fonctionner avec FF, IE, Opera mais il faudrait tester avec d'autres navigateurs.
seulement mozilla compte intégrer document.all :shock: :roll:

Publié : 07 mars 2006, 19:29
par martin
epsy a écrit : seulement mozilla compte intégrer document.all :shock: :roll:
C'est déjà le cas dans firefox 1.5, mais en mode quirk (je crois, pas sûr), et ils ont prévu que ce genre de test (if (document.all)) renvoie false.
des détails

Publié : 07 mars 2006, 20:55
par calimo
martin a écrit :(if (document.all)) renvoie false.
Et désactive complètement document.all dans la page !

Publié : 09 mars 2006, 12:04
par Benoit
lordbdp a écrit :Mais sommes-nous toujours obligé de proposer une Ctrl+D ? N'y a-t-il pas de solution pour proposer une mise en favoris sans combinaison clavier ni autres bidouilles ?
Heureusement qu'il n'y en a pas, sinon les sites ne se priveraient pas pour remplir ta liste de "favoris" à ta place et sans te demander ton avis :)