2012-04-23 11 views
10

Ho creato un sito Web per un progetto che sto realizzando. Nel contenuto del sito web ci sono alcuni link per pagine web esterne che possono essere visitate. Nel frattempo, quando l'utente fa clic su uno dei link, verrà indirizzato al link specificato e non sarà più nella pagina corrente. Quello che volevo fare è avere il sito web specificato nel link cliccato appare in una nuova scheda quando l'utente fa clic sul link. In questo modo l'utente rimane sulla pagina corrente che è uno e può anche visualizzare l'altra pagina sulla nuova scheda.Apertura di un collegamento in una nuova scheda

Ho guardato su internet e ho trovato questo che sembrava essere utile:

function externalLinks() 
{ 
    var anchors = document.getElementsByTagName("a"); 
    for (var i=0; i<anchors.length; i++) 
    { 
     var anchor = anchors[i]; 
     if(anchor.getAttribute("href")) 
     anchor.target = "_blank"; 
    } 
} 
window.onload = externalLinks; 

Il problema che sto affrontando è che la barra di navigazione del mio sito web contiene i tag di ancoraggio. Quindi ora se l'utente fa clic sui collegamenti sulla barra di navigazione, aprirà una nuova scheda. Voglio che ciò accada SOLO se l'utente fa clic su un link nel contenuto del mio sito web. Quindi, se l'utente fa clic su un link nella barra di navigazione, non dovrebbe aprire una nuova scheda e dovrebbe solo portarlo alla destinazione specificata.

Ho provato ad aggiungere una classe a tutti i collegamenti nel contenuto e utilizzare getElementByClassName ma ancora non ha funzionato

qualcuno mi può aiutare con questo

+1

Mentre probabilmente sembra una buona idea, non si dovrebbe davvero essere costringendo tale decisione sul visitatore - vedi: http : //www.webcredible.co.uk/user-friendly-resources/web-usability/new-browser-windows.shtml – CJM

risposta

28


Si può semplicemente utilizzare HTML:

<a target="_blank" href="YourAmazingURL">Click here for Amazing URL</a> 

Un altro esempio:

<a target="_blank" href="http://www.google.com/">Google</a> 

Questa sfrutta l'attributo di destinazione.

Maggiori informazioni sul attributo target: http://www.w3schools.com/tags/att_a_target.asp anche: http://www.w3schools.com/html/html_links.asp

EDIT:

Per XHTML, basta fare questo:

<a href="YourAmazingURL" onclick="window.open(this.href,'_blank');return false;">Click here for Amazing URL</a> 

O, ancora:

<a href="http://www.google.com/" onclick="window.open(this.href,'_blank');return false;">Google</a> 

+0

Il problema è che mi viene richiesto solo di utilizzare XHTML e, durante la convalida della pagina, il target non è un attributo –

+0

Là - Aggiornato per XHTML. – anonymous

+0

Grazie. Ho anche trovato un modo di usare jQuery per farlo, ma in questo modo è anche bello sapere :-). –

2

State necessario per utilizzare javascript per questo ?

In caso contrario, è possibile aggiungere l'attributo direttamente a un tag nell'HTML.

Ad esempio: <a href="http://www.google.co.uk" target="_blank">Google</a>

Che probabilmente sarebbe un modo più facile per voi di farlo se javascript non è richiesto.

+1

Il problema è che mi viene richiesto solo l'uso di XHTML e, durante la convalida della pagina, viene indicato come target non è un attributo –

-1

si desidera utilizzare document.getElementById("theidgoeshere");

A tale scopo, impostare l'attributo id nel tuo link in questo modo:

<a href="www.google.com" id="theidgoeshere">Google</a> 

Poi, nel tuo javascript

var anchor = document.getElementById("theidgoeshere"); 
    if(anchor.getAttribute("href")) 
     anchor.target = "_blank"; 

Si noti inoltre che si potrebbe desiderare fare a meno del javascript. Basta inserire target="_blank" nel tag di ancoraggio.

0

Se è necessario fare affidamento su JavaScript:

Fondamentalmente è solo bisogno di cambiare il vostro if -condition (per verificare se i punti di collegamento di ancoraggio ad una posizione esterna o meno).

Quindi, anziché if(anchor.getAttribute("href")), utilizzare if(anchor.getAttribute("href") && anchor.hostname!==location.hostname).

Con un po 'di codice di ripulire, la funzione dovrebbe apparire come segue:

function externalLinks() { 
    for(var c = document.getElementsByTagName("a"), a = 0;a < c.length;a++) { 
    var b = c[a]; 
    b.getAttribute("href") && b.hostname !== location.hostname && (b.target = "_blank") 
    } 
} 
; 
externalLinks(); 
+0

Potrebbe il downlocoter fornire commenti come per il downvote? Grazie! – eyecatchUp

Problemi correlati