11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Avec jquery je peux ouvrir en target blank tous les liens qui débute avec http:// le problème c'est que le client ajoute des liens internes en mettant l'url au complet de sont propre site. J'aimerais lui indiquer que si ce sont des liens interne mais avec http://www.monsite.com ne fait pas un target blank.

   
 <script type="text/javascript">
<!-- // <![CDATA[
$(document).ready(function(){
	$('a[href^="http://"]').attr({target: "_blank", title: "S\'ouvre dans une nouvelle fenêtre"});
});
// ]]> -->

Modifié par britanicus75 (13 Mar 2009 - 21:33)
Un filtre (voir la documentation) devrait permettre de faire le tri en rejetant, avec une expression régulière sur l'adresse, les liens dont les attributs contiennent l'adresse du site.

$('a[href^="http://"]').filter(function(){
return !/www\.mon\.site\.com/.test($.(this).attr("href"))
}).attr({target: "_blank", title: "S\'ouvre dans une nouvelle fenêtre"});
// Ouf !


Bien que le vendredi 13 soit révolu, cela devrait fonctionner !
Modifié par Julien de Prabere (14 Mar 2009 - 09:28)
Hello,

Petite remarque en passant : il serait beaucoup plus judicieux d'appliquer target="_blank" directement dans le code XHTML. S'il s'agit d'utilisation de doctype strict, revenir au doctype transitionnel, car ce contournement n'est que de la poudre aux yeux (sans parler des problèmes qu'il peut poser).
Julien Royer a écrit :
sans parler des problèmes qu'il peut poser

Pour en parler brièvement:
1. Si l'ouverture dans une nouvelle fenêtre est important pour l'utilisateur, par exemple dans le cas d'un lien vers les conditions générales sur une page d'inscription où l'utilisateur est en train de saisir des données, autant ne pas la faire dépendre de JavaScript.
2. La solution proposée nuit à l'accessibilité car elle crée un title qui ne reprend pas l'intitulé du lien. Or, il est possible de configurer un lecteur d'écran pour qu'il remplace, à la lecture, l'intitulé du lien par le contenu du title.

Enfin, la solution proposée est limitée car, sauf erreur de ma part, elle ne prend pas en compte les liens relatifs ("article/machin"), ou les liens absolus depuis la racine du domaine ("/article/machin").
Je n'aurais pas mieux résumé, Florent. Smiley smile

Petit problème supplémentaire : l'attribut target n'est ajouté qu'au chargement de la page, ce qui pose problème si l'utilisateur clique sur un lien "trop" tôt.
Julien de Prabere a écrit :
Un filtre (voir la documentation) devrait permettre de faire le tri en rejetant, avec une expression régulière sur l'adresse, les liens dont les attributs contiennent l'adresse du site.

$('a[href^="http://"]').filter(function(){
return !/www\.mon\.site\.com/.test($.(this).attr("href"))
}).attr({target: "_blank", title: "S\'ouvre dans une nouvelle fenêtre"});
// Ouf !


Bien que le vendredi 13 soit révolu, cela devrait fonctionner !


Merci pour l'info parcontre je ne sais pas ce que fait .test?
La méthode test de javascript, de syntaxe rgexp.test(str), renvoie une valeur booléenne indiquant l'existence ou non du modèle définit par l'expression régulière rgexp dans la chaîne str.

En retournant false (avec une négation devant !), lorsque l'adresse du site est trouvée (il est inutile de reprendre le http:// qui figure, à ce niveau, dans toutes les adresses), cette méthode devrait permettre d'éliminer les liens internes au site fussent-ils écrits avec leurs adresses absolues.

Quant aux autres considérations, constatons seulement que quelques balises target sur le site alsacréations nous éviteraient de retaper nos interventions après pérégrinations, et puis, à propos de validation, osons déclarer haut et fort : «Aux chiottes le W3C !»
Modifié par Julien de Prabere (17 Mar 2009 - 14:22)
Julien de Prabere a écrit :
Quant aux autres considérations, constatons seulement que quelques balises target sur le site alsacréations nous éviteraient de retaper nos interventions après pérégrinations, et puis, à propos de validation, osons déclarer haut et fort : «Aux chiottes le W3C !»


Mais on est que mardÿ Smiley sweatdrop Smiley lol
Modifié par Patidou (17 Mar 2009 - 14:25)
Julien de Prabere a écrit :
Quant aux autres considérations, constatons seulement que quelques balises target sur le site alsacréations nous éviteraient de retaper nos interventions après pérégrinations, et puis, à propos de validation, osons déclarer haut et fort : «Aux chiottes le W3C !»

Je crois qu'une relecture des réponses précédentes est nécessaire. Smiley smile

Le débat n'a pas porté ici sur les problèmes posés par l'utilisation de l'attribut (et non balise) target, mais justement sur le fait qu'il serait préférable de l'appliquer directement dans le code HTML au lieu de passer par ce contournement un peu tiré par les cheveux en JavaScript.

En ce qui concerne le W3C et la validation, je suppose qu'il s'agit d'un petit trait d'humour.
Administrateur
Julien de Prabere a écrit :
osons déclarer haut et fort : «Aux chiottes le W3C !»

Plutôt original de poster ce genre de choses dans un forum consacré aux standards Smiley langue

Attendez au-moins quelques jours pour ce genre de discours Smiley cligne

Julien de Prabere a écrit :
constatons seulement que quelques balises target sur le site alsacréations nous éviteraient de retaper nos interventions après pérégrinations

Non.
Nous préférons n'imposer aucune forme de comportement aux utilisateurs. S'ils veulent ouvrir un lien dans une nouvelle fenêtre ou onglet, il y a de nombreux moyens de le faire... volontairement, sans y être forcé et surpris.
Modifié par Raphael (17 Mar 2009 - 15:13)
Raphael a écrit :

Non.
Nous préférons n'imposer aucune forme de comportement aux utilisateurs. S'ils veulent ouvrir un lien dans une nouvelle fenêtre ou onglet, il y a de nombreux moyens de le faire... volontairement, sans y être forcé et surpris.


Bien je prend soin de lui ajouter une image à côté du mot lorsqu'il y a un lien externe, en plus je lui ajoute un title qui indique que cette page s'ouvrira dans une nouvelle fenêtre, enfin le target:blank ne passe plus au validateur. Je serai bien ravis de connaître "Les nombreux moyens pour le faire". Quelle est la différence avec cette technique?
britanicus75 a écrit :
enfin le target:blank ne passe plus au validateur

Valide en HTML 4.01 Transitional et XHTML 1.0 Transitional. Donc voilà. Smiley smile
Aux dernières nouvelles, target="_blank" sera valide en HTML 5.

britanicus75 a écrit :
Je serai bien ravis de connaître "Les nombreux moyens pour le faire".

Raphaël parlait ici de l'utilisateur. Ctrl+click (ou Cmd+click), clic droit et ouvrir dans une nouvelle fenêtre ou un nouvel onglet, click de la molette, etc. Suivant les OS et les navigateurs les raccourcis divergent, mais ils sont multiples.
Florent V. a écrit :

Valide en HTML 4.01 Transitional et XHTML 1.0 Transitional. Donc voilà. Smiley smile
Aux dernières nouvelles, target="_blank" sera valide en HTML 5.


Malheureusement je suis en XHTML 1.0 Strict Smiley biggrin
Modifié par britanicus75 (17 Mar 2009 - 21:30)
britanicus75 a écrit :
Malheureusement je suis en XHTML 1.0 Strict Smiley biggrin

Bah tant pis. Ça te fait des erreurs de validation dont tu connais la provenance et les conséquences exactes (en pratique: rien du tout). Donc tu peux les ignorer.
(Rappelons à tout hasard que la validation n'est pas une religion, pas une obligation et pas même un devoir moral. C'est un outil. Si on livre à un client un code invalide pour des raisons précises, il peut être utile de documenter ces raisons.)

Ou bien tu passes en Transitional. Le transitional, c'est bon, mangez-en.

(En fait la distinction Strict/Transitional est pour ainsi dire obsolète vu l'évolution de HTML ces deux-trois dernières années. Le Strict se voulait plus proche dans l'esprit de XHTML 1.1 et XHTML 2. Sauf que ce qui avance aujourd'hui c'est HTML 5, qui fait fi de cette distinction et récupère certains éléments ou attributs dépréciés en HTML 4.01 Strict/XHTML 1.0 Strict. Enfin, le XHTML 1.0 c'est has been, c'est tellement 2001-2007. Smiley lol Mais je m'égare, vendredÿ c'est dans trois jours.)
Donc on revient au html 4? D'ailleurs je ne sais plus ce qui est bon... il y a pas si longtemps html 4 était passé date... on ventait le xhtml 1.0 et soudainement le html 4 revient en force. Je rêve du jour ou il n'y aura plus de doctype. Smiley langue
britanicus75 a écrit :
Donc on revient au html 4? D'ailleurs je ne sais plus ce qui est bon... il y a pas si longtemps html 4 était passé date... on ventait le xhtml 1.0 et soudainement le html 4 revient en force. Je rêve du jour ou il n'y aura plus de doctype. Smiley langue

Suivre une mode est en général une raison assez mauvaise pour faire un choix technologique...

Un principe plus sain est sans doute d'utiliser ce dont on a besoin. En l'occurrence, il semble que tu n'as pas suivi ce principe puisque tu as besoin de l'attribut target, qui n'est pas disponible en doctype strict mais en doctype transitional.

Moralité : le plus sensé serait sans doute pour toi de passer en doctype transitional.

Choix alternatifs :
- Ignorer les erreurs de validation concernant l'attribut target
- Se demander pourquoi cet attribut n'est pas disponible en doctype strict et donc si tu en as réellement besoin

Relire les réponses de Florent devrait t'aider à faire un choix. Smiley smile
Modifié par Julien Royer (18 Mar 2009 - 19:42)
Julien Royer a écrit :

Un principe plus sain est sans doute d'utiliser ce dont on a besoin. En l'occurrence, il semble que tu n'as pas suivi ce principe puisque tu as besoin de l'attribut target, qui n'est pas disponible en doctype strict mais en doctype transitional.


Parfois faut suivre les standards de la cie, ensuite j'allais utiliser cette technique qui semble n'a pas d'important sur le choix du doctype Ouvrir des liens externes dans une nouvelle fenêtre. Mais comme j'avais déjà jquery d'installer, j'ai donc oser essayer quelque chose de nouveau.