web-dev-qa-db-fra.com

lien avec target = "_ blank" ne s'ouvre pas dans un nouvel onglet dans Chrome

Sur ce site , la navigation supérieure en accordéon contient un élément appelé "Fondation": (capture d'écran) .

Cet élément est produit par le code HTML:

<a href="http://www.foracure.org.au" target="_blank" style="width: 105px;"></a>

Toutefois, dans Chrome, lorsque vous cliquez sur cet élément, le nouveau site Web ne s'ouvre pas dans un nouvel onglet.

Pouvez-vous s'il vous plaît me dire pourquoi? Merci.

22
Steve

Parce que JavaScript gère l'événement click. Lorsque vous cliquez sur, le code suivant est appelé:

el.addEvent('click', function(e){
    if(obj.options.onOpen){
        new Event(e).stop();
        if(obj.options.open == i){
            obj.options.open = null;
            obj.options.onClose(this.href, i);
        }else{
            obj.options.open = i;
            obj.options.onOpen(this.href, i);
        }   
    }       
})

Le onOpen modifie manuellement le location.

Edit: Concernant votre commentaire ... Si vous pouvez modifier ImageMenu.js, vous pouvez mettre à jour le script qui appelle onClose pour transmettre l'objet élément a (this, plutôt que this.href)

obj.options.onClose(this, i);

Ensuite, mettez à jour votre instance ImageMenu en apportant la modification suivante onOpen:

window.addEvent('domready', function(){
    var myMenu = new ImageMenu($$('#imageMenu a'), {
        openWidth: 310,
        border: 2,
        onOpen: function(e, i) {
            if (e.target === '_blank') {
                window.open(e.href);    
            } else {
                location = e.href;
            }
        }
    });
});

Ceci vérifierait la propriété target de l'élément pour voir si c'est _blank, puis appelez window.open, si trouvé.

Si vous préférez ne pas modifier ImageMenu.js, une autre option consiste à modifier vos liens pour les identifier dans votre gestionnaire onOpen. Dites quelque chose comme:

<a href="http://www.foracure.org.au/#_b=1" target="_blank" style="width: 105px;"></a>

Ensuite, mettez à jour votre appel onOpen à:

onOpen: function(e, i) {
    if (e.indexOf('_b=1') > -1) {
        window.open(e);   
    } else {
        location = e;
    }
}

Le seul inconvénient est que l'utilisateur voit le hachage en vol stationnaire.

Enfin, si le nombre de liens que vous envisagez d’ouvrir dans une nouvelle fenêtre est faible, vous pouvez créer une carte et vérifier par rapport à celle-ci. Quelque chose comme:

var linksThatOpenInANewWindow = {
    'http://www.foracure.org.au': 1
};

onOpen: function(e, i) {
    if (linksThatOpenInANewWindow[e] === 1) {
        window.open(e);   
    } else {
        location = e
    }
}

Seul inconvénient est la maintenance, en fonction du nombre de liens ....

D'autres ont suggéré de modifier le lien (en utilisant # ou javascript:) et l'ajout d'un gestionnaire d'événements en ligne (onclick) - Je ne le recommande pas du tout, car il rompt les liens lorsque JS est désactivé/n'est pas pris en charge.

Bonne chance!

16
Jack
Replace 

<a href="http://www.foracure.org.au" target="_blank"></a>    

with 

<a href="#" onclick='window.open("http://www.foracure.org.au");return false;'></a>

dans votre code et travaillera dans Chrome et d'autres navigateurs.

Merci Anurag

13
Anurag

Pour une raison quelconque, cela ne fonctionne pas afin que nous puissions le faire par un autre moyen

supprimez simplement la ligne et ajoutez ceci: -

<a onclick="window.open ('http://www.foracure.org.au', ''); return false" href="javascript:void(0);"></a>

Bonne chance.

4
Tony

Votre syntaxe pour l'attribut cible est correcte, mais les navigateurs ne doivent pas l'accepter. Ils peuvent l'interpréter comme ouvrir la destination dans un nouvel onglet plutôt que dans une nouvelle fenêtre, ou ignorer complètement l'attribut. Les navigateurs ont des paramètres pour ces problèmes. De plus, l'ouverture de nouvelles fenêtres peut être empêchée par les plugins du navigateur (généralement conçus pour éviter les publicités gênantes).

Vous ne pouvez rien faire à ce sujet en tant qu’auteur. Vous pourriez envisager d'ouvrir une nouvelle fenêtre avec JavaScript à la place, cf. à la réponse acceptée, target = "_ blank" ne fonctionne pas dans Firefox?.

target = "_ blank" ne fonctionne pas dans firefox?

1
bhavesh vala