XHTML-konformes Öffnen eines Links in einem neuen Fenster

28.12.2005 08:04 Uhr | Kommentare: 4 | Kommentar hinterlassen
Einsortiert in Software

Nach dem ich meinen “Fehler” mit rel=”nofollow” behoben habe, war ich im Web noch ein bißchen auf der Suche, was man mit rel=”external” noch so machen kann. Dabei habe ich immer wieder Lösungen für das XHTML-konforme Öffnen von Links in einem neuen Fenster als Ersatz für target="_blank" gefunden. Daher hier mal ein paar Anregungen dazu, als Ergebniss der “Funde”.

Die grundsätzliche Vorgehensweise ist immer gleich

… und basiert immer auf JavaScript. Dabei wird grundsätzlich mit document.getElementsByTagName("a") ein Array mit allen Links der aktuellen HTML-Seite gefüllt. Anschließend wird überprüft, ob die Attribute href und rel vorhanden sind. Zusätzlich muß noch rel das Argument external enthalten. Ist das der Fall, wird ein zusätzliches Attribut target eingeführt. Und das wiederum erhält das übliche _blank. Im Quellcode sieht das Ganze dann so aus:

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

Beim Laden der Seite wird über window.onload die Funktion ExternalOpenInNew aufgerufen und somit für alle Links, die rel="external" als Attribut haben, zusätzlich target="_blank" hinzugefügt.

Jetzt wäre noch ein Problem zu klären
Was tun wenn man mehr als eine Funktion mit window.onload ausführen muß?
Die Lösung ist ganz einfach:
Man baut einfach eine zusätzliche Funktion und schreibt dort den Aufruf aller beim Laden auszuführenden Funktionen rein. Ein Beispiel wäre:

function beimLaden() {
  ExternalOpenInNew();
  weitereFunktion();
  nochEineFunktion();
}
window.onload = beimLaden;

Weiterführende Links
+ Sitepoint: New-Window Links in a Standards-Compliant World
+ Web Standards Blog: Opening Windows in an XHTML World
+ tcervo.com: Opening a link in a new window - the valid way

Eine Lösung für XHTML 1.1 ohne JavaScript

Accessify.com schlägt eine Weg für XHTML 1.1 vor, der ohne JavaScript arbeitet. Dabei wird eine neue DTD (Document Type Definition) als Modul definiert, die wiederum target="_blank" enthält.

Persönlich halte ich das zwar nicht für den richtigen Weg - wenn auch standardkonform - aber die Idee ist gut und läßt sich bestimmt für was anderes verwenden. :)

4 Kommentare zu “XHTML-konformes Öffnen eines Links in einem neuen Fenster”

  • #1

    Naja, der einzige Vorteil mit dem Javascript ist, dass der Code besser validiert. Der Browser macht aber nix anderes dabei, da kann man auch direkt target=”_blank” in den Link reinschreiben. Aber wenn’s schee macht…

    Zum Onload-Problem, dafür gibts schon länger folgende erprobte Lösung:

    function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
    window.onload = func;
    } else {
    window.onload = function() {
    oldonload();
    func();
    }
    }
    }

    Original ist das von http://simon.incutio.com/archive/2004/05/26/addLoadEvent

  • #2

    Danke für den Tip. Ich bin kein JS-Experte und versuche es so weit als möglich zu umgehen. Da ist man für solche Sachen sehr dankbar. :)

  • #3
    Gravatar suit meinte

    was du vorgibst ist nicht xhtml konform ;) (auch wenn der kommentar etwas spät kommt)

    auch wenn das ursprüngliche dokument valide ist, ist das generierte dokument dann nicht mehr valide - somit ist es nicht konform sondern enie möglichkeit, dich selbst zu betrügen

    lass einfach target blank und kennzeichne links mit einen rel external mit einer anderen klasse und pack dann ein symbol dahinter (wie auf zb im mediawiki), dann erkennt man auf einen blick obs ein externer link ist oder nicht - ob ich dann ein neues fenster/tab oder nicht haben will, möchte ich als besucher dann doch alleine entscheiden können oder vordefiniert von meinem browser abhängig machen

  • #4

    Ja, wirklich ein bisschen spät ;)

    Natürlich ist eine so veränderte Webseite nicht mehr nach strict valide. Hier ging es nur um Ansätze es zu realisieren. Der Rest hatte sich für mich bereits nach diesem Artikel erledigt ;)

Hinterlasse einen Kommentar

Bitte beachten: Mit der Abgabe eines Kommentares oder dem Senden eines Trackbacks erklärst Du Dich mit den Kommentar- und Trackbackrichtlinien einverstanden!

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Du kannst Deinen Kommentar nach dem Abspeichern noch 30 Minuten bearbeiten.

Kurznavigation

Featured Story

WordPress-Plugins

Tags

Kategorien

Empfehlungen

Hilfen und mehr ...

Kommerzielle Angebote

Anderes