Bonjour à tous,

Pour faire plus propre, j'affiche un écran de "Loading" lorsque je clique sur un lien interne de mes pages.
Pour cela, je rend visible un DIV (avec un effet d'apparition) lorsque l'on clique sur un lien et je le cache lorsque la page appelée est complétement chargée (avec l'effet inverse)

Le problème, c'est que si l'internaute demande a afficher la page dans un autre onglet (CTRL+click ou click droit > voir dans un autre onglet), et ben le DIV Loader de la page appelante ne s'en va pas...puisque cette page n'est pas rechargée.

ma question est : Peux on détecter la destination d'un lien (pas la target du HTML)

Merci pour votre aide

Marco
Bonjour,

Il suffit de mettre la fonction de l'effet loading dans une condition permettant de tester si l'on se trouve ou non sur le nom de domaine du site.

Pour détecter le nom de domaine en javascript : `window.location.host`.
Bonjour et merci pour ton réponse.

Désolé pour le retard, mais j'étais malade.

Je ne pense pas que ta solution fonctionne car ce n'est pas sur la page appelée que j'ai le problème, mais sur la page appelante.

Bon, plus j'y réfléchis et moins je trouve la solution, mais je vais creuser encore un peu.

Merci à toi

Marco
Modérateur
Bonjour,

Ton histoire, Marco, me rappelle un article que j'avais lus. Tu y trouveras peut-être l'inspiration.

L'article en question décrit la façon dont on peut intervenir sur la page qui provoque l'ouverture d'un onglet par l'utilisation de window.opener (ou plutôt l'article indique comment s'en prémunir).

Developpez.com - Un développeur web recommande l'utilisation de "rel=noopener", pour empêcher les attaques par hameçonnage lancées en se servant du window.opener
qui cite:
Daniels Jules - Prevent reverse tabnabbing phishing attacks caused by _blank (in english)

Bonne journée Smiley smile
Modifié par Greg_Lumiere (06 Jul 2016 - 11:27)
Bonjour,

Sujet intéressant, et aurait pu résoudre mon problème, sauf que cela ne marche pas.
D'après les commentaires, cela ne marche pas sur Chrome et IE; mais chez moi, ca ne marche pas non plus sous FF.
Donc, c'est pas glop.

Dommage

Merci

Marco
Ayé, j'ai trouvé une solution.
Bon, c'était assez bête, tellement que je n'y avais pas pensé.
Il suffit d'intercepter l'action du lien et de le gérer en JS ou JQuery dans mon cas.

Voici mon code complet:

$(window).on("load", function() {

// Fermeture du DIV qui me sert de loader lorsque la page est fini d'etre chargée.
        $("#loaderPage").animate({ width: 'toggle'}, 700, "swing");
	
// J'ajoute la class "showLoader" sur tout lien pour lesquels je souhaite faire afficher le loader au click.
        $('.showLoader').click(function(event) {
			 event.preventDefault(); // intercepte l'action (href) du lien (<a>)
			 var url = $(this).attr('href'); // récupérer la valeur du href.
            $("#loaderPage").animate({ // Apparition du Loader
                width: 'toggle'
            }, 700, "swing", function() { // lorsque l'animation d'apparition est fini
                window.location.href = url; // on appel l'URL en forcant la page courante.
            });
        });

});


Je vais ajouter des controles pour traiter les target spécifiques (_blank) si elle sont indiquées dans les attributs du lien.

J'ai testé en faisant un CRTL+Click sur le lien, il m'affiche bien la page dans le même onglet.

Par contre, si je fais Click Droit + Ouvrir dans un nouvel onglet, je n'ai pas l'animation de fermeture et cela s'ouvre bien dans un nouvel onglet.
Donc pour moi c'est nickel, même si je ne comprend pas (j'imagine que c'est le navigateur qui prend la main lorsque l'on fait le click droit)

Merci pour votre aide à tous

Marco