2012-04-23 24 views
10

Stworzyłem stronę internetową dla projektu, który robię. W treści strony internetowej znajdują się linki do zewnętrznych stron internetowych, które można odwiedzać. W tym samym czasie, gdy użytkownik kliknie na jeden z linków, zostanie przekierowany pod wskazany link i nie będzie już na bieżącej stronie. Chciałem, aby określona strona internetowa w klikniętym łączu pojawiła się na nowej karcie, gdy użytkownik kliknie link. W ten sposób użytkownik pozostaje na bieżącej stronie, którą jest jednym, a także może wyświetlić drugą stronę na nowej karcie.Otwieranie linku w nowej zakładce

Szukałem w internecie i znaleźć to, co wydawało się być użyteczne:

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; 

Problem jestem stoi to, że navbar mojej stronie zawiera znaczniki zakotwiczenia. Teraz, jeśli użytkownik kliknie na odnośniki na pasku nawigacyjnym, otworzy nową kartę. Chcę, aby stało się to TYLKO jeśli użytkownik kliknie link w treści mojej witryny. Jeśli więc użytkownik kliknie link w pasku nawigacyjnym, nie powinien otwierać nowej karty i powinien po prostu zabrać go do określonego miejsca docelowego.

Próbowałem dodać klasę do wszystkich linków w treści i użyć getElementByClassName ale nadal nie działa

Ktoś może mi pomóc z tym

+1

Choć prawdopodobnie wydaje się dobrym pomysłem, nie powinien być naprawdę zmusza taką decyzję na swoim gościem - patrz: http : //www.webcredible.co.uk/user-friendly-resources/web-usability/new-browser-windows.shtml – CJM

Odpowiedz

28


można po prostu używać HTML:

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

Inny przykład:

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

ta wykorzystuje atrybutu docelowego.

Więcej informacji na temat atrybutu target: http://www.w3schools.com/tags/att_a_target.asp również: http://www.w3schools.com/html/html_links.asp

EDIT:

Dla XHTML, po prostu to zrobić:

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

Albo jeszcze:

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

+0

Problem polega na tym, że muszę używać tylko XHTML, a podczas sprawdzania poprawności strony jest napisane, że cel nie jest atrybutem. –

+0

Tam - Zaktualizowano dla XHTML. – anonymous

+0

Dziękuję. Znalazłem również sposób, aby użyć jQuery, ale w ten sposób dobrze jest wiedzieć :-). –

2

Czy wymagane do korzystania z tego javascript ?

Jeśli nie, możesz po prostu dodać atrybut bezpośrednio do tagu w kodzie HTML.

Na przykład: <a href="http://www.google.co.uk" target="_blank">Google</a>

To prawdopodobnie byłby łatwiejszy sposób, aby to zrobić, jeśli JavaScript nie jest wymagane.

+1

Problem polega na tym, że muszę używać tylko XHTML, a podczas sprawdzania poprawności strony mówi cel nie jest atrybutem. –

-1

chcesz użyć document.getElementById("theidgoeshere");

Aby to zrobić, należy ustawić atrybut id w linku tak:

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

Następnie w JavaScript

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

Należy również pamiętać, warto obyć się bez javascript. Wystarczy umieścić target="_blank" w swoim znaczniku zakotwiczenia.

0

Jeśli trzeba polegać na JavaScript:

Zasadniczo wystarczy zmienić if -condition (w celu sprawdzenia, czy w punktach łączących kotwica do zewnętrznej lokalizacji, czy nie).

Tak więc zamiast if(anchor.getAttribute("href")) użyj if(anchor.getAttribute("href") && anchor.hostname!==location.hostname).

z kawałkiem kodu oczyścić, czynność powinna wyglądać następująco:

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

Czy osoba, która zgłosiła do niej wniosek, może przekazać wszelkie uwagi dotyczące stanowiska? Dzięki! – eyecatchUp