Wie füge ich target="_ blank" nur externen Links hinzu?

8

Ich erstelle ein benutzerdefiniertes, branchenspezifisches CMS (mit Django). Im Backend können Webmaster entweder eine interne Verbindung angeben, z. "/ page1" oder ein externer Link, der für verschiedene Navigationselemente auf der gesamten Website verwendet werden kann (alle verwenden <a> , wenn sie gerendert werden). Das Problem ist, dass ich möchte, dass interne Links auf der aktuellen Registerkarte geöffnet werden, aber externe Links sollten target="_blank" verwenden, um eine neue Registerkarte oder ein neues Fenster zu öffnen.

Wie kann ich den HTML-Code verarbeiten, um dies zu erreichen?

Ich würde eine serverseitige Lösung bevorzugen, aber mir ist keine saubere Möglichkeit bekannt, gerenderte Vorlagen in django vorzuverarbeiten. Also, ich nehme an, der einfachste Weg, dies zu tun, ist wahrscheinlich eine javascript / jquery-Lösung: ein Skript, das beim Laden jeder Seite ausgeführt wird und das Attribut "target=" _ blank "zu allen externen Links, aber nicht zu internen Links hinzufügt. Aber ich weiß auch nicht, wie ich das machen soll.

    
Ben Roberts 20.08.2012, 17:05
quelle

5 Antworten

31

Ich benutze das Folgende für eine Weile. Kann mich nicht erinnern, wo ich es ursprünglich gefunden habe:

%Vor%

Das fügt einen :external jQuery-Selektor hinzu, also können Sie einfach Folgendes tun:

%Vor%

Das Schöne an der Verwendung des benutzerdefinierten Selektors ist, dass Sie, wenn Sie einen "externen" Link ändern müssen, diesen an einer Stelle ändern können und sich nicht um den Rest Ihres Codes kümmern müssen. Zum Beispiel haben wir in meiner Organisation bestimmte Subdomains, die nicht "extern" sind, sondern die wir immer noch in neuen Fenstern öffnen wollen.

    
Chris Pratt 20.08.2012, 17:24
quelle
5

Versuchen Sie etwas wie

%Vor%

Vergessen Sie nicht, das Skript zu dem Zeitpunkt auszuführen, zu dem alle Links in der Dokumentstruktur vorhanden sind - in window.onload event.

    
duri 20.08.2012 17:13
quelle
3

Sie könnten so etwas tun:

%Vor%

Dies wird jeden Link verarbeiten, wenn Sie darauf klicken, und sollte nicht jeden Link mehr als einmal verarbeiten. Wenn es extern sein muss, wird target auf _blank gesetzt und es sollte in einem neuen Fenster geöffnet werden. Hier ist eine Arbeit .

Aktualisieren : Meine Methode zu bestimmen, ob die Verknüpfung vor Ort bleibt oder nicht, ist ziemlich grob. Die Methode in diese Antwort ist gründlicher. Ich würde wahrscheinlich meine einfache Regex-Übereinstimmung stattdessen durch diesen Test ersetzen.

    
benekastah 20.08.2012 17:25
quelle
2

Ich empfehle Ihnen, diese Serverseite zu machen. Ändern Sie die Vorlage der Seite je nach dem Ort des Links.

    
StoryTeller 20.08.2012 17:09
quelle
0

Sie könnten das auch tun:

$("a[href^='http://']").attr("target","_blank");

oder

%Vor%     
Jessica Guerard 11.04.2016 14:28
quelle

Tags und Links