2010-11-24 12 views
1

Wir verwenden "Ziel" Attribut des Tags, um den Zielort der Verbindung anzugeben.Machen Sie HTML-Anker in einem neuen Fenster in einem strengen docktype

Aber "target" -Attribut kann nicht in strict Doctype verwendet werden (ich erwähnte dies bei http://w3schools.com/tags/tag_a.asp). Was ist die Lösung, wenn wir einen strengen Doctype verwenden?

+0

Weiß jemand, WARUM das Attribut "Ziel" kein Teil des strengen DOCTYPE ist? Persönlich bevorzuge ich HTML5, das immer noch dieses Attribut hat, aber ich bin nur neugierig ... –

Antwort

5

Kurz gesagt, JavaScript.

Der strenge Doctype wird lose als "streng Dokumentinhalt" und nicht als Verhalten, das das Zielattribut definiert, betrachtet. Es geht davon aus, dass der Benutzer entscheiden wird und vollständige Kontrolle darüber hat, wie Links in seinem Browser geöffnet werden.

Die Lösung besteht darin, JavaScript zu verwenden, um zu definieren, wie Verknüpfungen geöffnet werden. Sie können eine Klasse oder ein anderes Attribut verwenden, um eine JS-Bibliothek zu haben, sie zu zwingen, in einem neuen Fenster zu öffnen:

<a href="test.php" rel="external">my link</a> 

So Ihr Skript könnte wie folgt aussehen:

function externalLinks() { 
    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 = externalLinks; 

Das ist noch einfacher in jQuery:

$(function(){ 
    $('a[rel=external]').attr('target', '_blank'); 
}); 
+1

+1 für den ersten Absatz. Wir können hinzufügen, dass es für den Benutzer nicht offensichtlich ist, wie sich ein Link, der das Zielattribut verwendet, bei seiner Aktivierung verhält. Daher - um rein und sauber zu sein - sollte das Skript, das Sie vorschlagen, einen Hinweis darauf enthalten, dass die Seite in einem neuen Fenster geöffnet wird - andernfalls "konvertieren" Sie einfach eine strikte Seite in eine vorübergehende Seiten-Post-Load - was bedeutet, dass die DTD ein strenges Dokument anzeigt während das Verhalten von einem Übergang ist ... Haare schneiden? – MikeD

1

Verwenden Sie entweder den Übergangsdoctyp, der target zulässt, oder verwenden Sie JavaScript, wenn Sie ein neues Fenster öffnen möchten.