2015-04-04 19 views
12

Unter this website enthält die obere Akkordeon-Navigation ein Element namens "Foundation": (screenshot).Link mit target = "_ blank" öffnet nicht in neuer Registerkarte in Chrome

Dieses Element von HTML-Code erzeugt wird:

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

jedoch in Chrome, wenn Sie auf dieses Element klicken, wird die neue Website in einem neuen Tab nicht öffnen.

Können Sie mir bitte sagen, warum? Vielen Dank.

+0

Werke für mich wie erwartet, das Ziel in einem neuen Tab geöffnet wird. – arkascha

+0

Danke @arkascha. Ich habe die Frage bearbeitet, um anzuzeigen, dass das Problem in Chrome auftritt. – Steve

+0

Ich verwende einen Chrom-Browser. Funktioniert bei mir. Offenbar ist es ein Effekt von allem, was Google für seine Chrome-Version zu dem feinen Chrom-Browser hinzufügt. – arkascha

Antwort

0

Ihre Syntax für das Zielattribut ist korrekt, aber Browser müssen es nicht berücksichtigen. Sie können dies so interpretieren, dass sie das Ziel in einem neuen Tab statt eines neuen Fensters öffnen, oder sie können das Attribut vollständig ignorieren. Browser haben Einstellungen für solche Probleme. Darüber hinaus kann das Öffnen neuer Fenster durch Browser-Plugins verhindert werden (typischerweise zur Vermeidung von lästigen Werbungen).

Da kann man als Autor wenig tun. Sie sollten stattdessen ein neues Fenster mit JavaScript öffnen, vgl. zu der akzeptierten Antwort auf target = "_ blank" funktioniert nicht in Firefox ?, aber Browser sind vielleicht noch weniger bereit, Seiten so neue Fenster öffnen zu lassen als über Ziel.

target="_blank" is not working in firefox?

8

Da JavaScript, um das Click-Ereignis verarbeitet. Wenn Sie klicken, wird der folgende Code genannt:

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); 
     } 
    }  
}) 

Die onOpen manuell location ändert.

Edit: In Bezug auf Ihren Kommentar ... Wenn Sie ImageMenu.js ändern können, können Sie das Skript aktualisieren, die onClose das a Element Objekt zu übergeben ruft (this, anstatt this.href)

obj.options.onClose(this, i); 

Dann aktualisieren Sie Ihre ImageMenu Instanz mit folgenden onOpen Änderung:

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; 
      } 
     } 
    }); 
}); 

Dies ist für die Zieleigenschaft des Elements überprüfen würde um zu sehen, ob es _blank ist, und rufen Sie dann window.open, wenn gefunden. Wenn Sie es vorziehen, ImageMenu.js nicht zu ändern, können Sie Ihre Links ändern, um sie in Ihrem Handler onOpen zu identifizieren. Sagen Sie etwas wie:

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

Aktualisieren Sie dann Ihre onOpen Aufruf:

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

Der einzige Nachteil ist, der Benutzer den Hash auf schweben sieht.

Wenn schließlich die Anzahl der Links, die Sie in einem neuen Fenster öffnen möchten, niedrig ist, können Sie eine Karte erstellen und dagegen prüfen. Etwas wie:

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

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

Einziger Nachteil ist Wartung, abhängig von der Anzahl der Links ....

Andere haben vorgeschlagen, den Link zu modifizieren (# oder javascript: verwenden) und Hinzufügen eines Inline-Event-Handler (onclick) - Ich empfehle nicht, dass überhaupt, wie es Links bricht, wenn JS deaktiviert/nicht unterstützt wird.

Viel Glück!

+0

Danke Jack. Ist es möglich, dieses JavaScript zu bearbeiten, um den Link in einem neuen Tab zu öffnen? Wenn das so ist, wie? – Steve

+1

Hey @Steve - Ich habe meine Antwort bearbeitet, um einige Workarounds einzubeziehen. Hoffe sie helfen! :) – Jack

7
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> 

im Code und wird in Chrome und anderen Browsern.

Dank Anurag

+1

Das wird funktionieren. Wie von Jack erwähnt, wird dies jedoch nicht funktionieren, wenn JavaScript nicht unterstützt wird. MDN schlägt vor, dies nie zu verwenden und gibt mehrere Gründe an. Hoffe, das hilft: https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Never_use_this_form_of_code_for_links_%3Ca_href_avascriptwindow.open(...)_...%3E – sdw

+0

Das ist nicht gut Ersatz, da dies das Crawlen dieser Links behindern könnte – maverick

3

es aus irgendeinem Grund nicht funktioniert, so dass wir diese

entfernen, indem Sie eine andere Art und Weise tun, nur die Zeile und fügen Sie diese: -

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

Viel Glück.

-2

Wenn Sie reagieren verwenden, um dies funktionieren soll:

<a href="#" onClick={()=>window.open("https://...")}</a>

+2

Das OP fragte speziell nach dem Verhalten von target = "_ blank" Einstellung des Link-Elements. Die Einführung von React (oder Javascript) ist für die Frage nicht besonders relevant. – hraynaud

Verwandte Themen