Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   XHTML 1.1 und Links (https://boardunity.de/xhtml-1-1-links-t2933.html)

Jan Stöver 20.03.2005 04:17

XHTML 1.1 und Links
 
Wie handhabt ihr es, wenn ihr andere Seiten verlinkt aber xhtml 1.1 und nicht XHTML transitional programmiert?

Seit 1.1 werden ja keine Frames mehr unterstützt und damit ist auch der Mißbrauch von target= als Linkziel (z.B. neues Fenster) verloren.

Eigentlich ist das ja nicht weiter schlimm ... allerdings hat man sich daran so sehr gewöhnt, dass im ersten Moment der Gedanke daran verschwendet werden darf, ob unerfahrene Besucher evtl. den Weg nicht mehr zurück finden oder sich schlichtweg auf der verlinkten Seite verlieren.

Greift ihr auf die aktuelle Alternative JS zurück? (bringt natürlich auch Nachteile mit sich)
Code:

<a href="http://www.boardunity.de" onclick="window.open(this.href); return false;">Boardunity</a>
So kann man zumindest sicher gehen, dass sich Seiten weiterhin in einem neuen Fenster öffnen.

Oder programmiert ihr XHTML strict und wartet auf CSS 3?
Code:

a { target-new:tab}
Ich denke ich werde strict weiter machen und auf JS für Links verzichten. So hat jeder erfahrene Besucher selbst in der Hand, wie und wo er den Link öffnet (Browsersteuerung).

Trotzdem freue ich mich auf Target in CSS 3 ...

Patrick Gotthardt 20.03.2005 09:26

Ich bevorzuge diese Variante:
Code:

<a href="link" class="external">Link</a>
Damit kann ich dann per CSS die Optik des Links verändern (z.B. ein Icon vor oder hinter dem Link plazieren). Und wenn ich lustig bin schreibe ich mir ein kleines Javascript, dass automatisch den Code hinzufügt, den du oben schon geschrieben hattest:
Code:

function alterLinks() {
        var links = document.getElementsByTagName('a');
        for(var i in links) {
            if(links[i].className.indexOf("external") != 1) {
                links[i].onclick = function() { window.open(this.href); return false; }
                }
        }
}

Finde ich zufriedenstellend. Wobei ich glaube, dass es auch ein rel=external anstelle einer CSS-Klasse tun würde. Aber da macht der IE wieder Probleme, wenn man die Optik mit CSS ändern möchte...

Acyd Burn 20.03.2005 09:33

Ich bevorzuge rel="external", da ich es somit rein logisch schon mal trenne... zum stylen kann ich immer noch eine klasse hinzufügen.

Meine Funktion sieht allerdings etwas anders aus (man mag sich nun drüber streiten ob es nun doch nicht wieder die alte Leier ist, aber nun ja... - den Vorteil sehe ich aber darin beliebige targets hinzuzufügen):

Code:

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";
        }
}


Patrick Gotthardt 20.03.2005 10:02

Ah ja. Die Variante kannte ich auch irgendwoher.

TRS 20.03.2005 12:22

Durch die Verwendung von Javascript rennt ihr genau in die falsche Richtung, die man mit XHTML Strict eingehen wollte. Der Sinn der Entfernung von target war es, dass der Nutzer am Browser selber entscheiden kann, ob er ein neues Fenster öffnet oder ob er im aktuellen Fenster weiter surft.

Durch die Korrektur via Javascript wird aber genau diese Idee wieder verworfen. Ich, als erfahrener Nutzer, kenne nur zu häufig das Problem, dass sich ein Fenster öffnet ohne meinen Willen. Das stört und ist nicht in meinem Sinn.

Wer seinen Besuchern trotzdem dieses Feature bieten will, sollte auf strict verzichten und Transitional einsetzen. Genau aus diesem Grund bietet XHTML auch Transitional an, so dass weiterhin solche Attribute genutzt werden können.

Sollte man denoch auf strict setzen, so sollte man einfach strict um das Attribute erweitern. Das W3 gibt die Möglichkeit eigene DTD zu erstellen, so dass man als Basis strict nimmt und Anker um das Attribute target erweitert.

Gruß

Jan Stöver 20.03.2005 12:31

Danke für die Alternative - ich habe mich persönlich nun dazu entschieden strict zu bleiben und den Besucher durch ein Icon vor dem Link das Verlassen der Seite zu visualisieren.

So kann der Besucher selbst entscheiden, ob er den Link im gleichen / neuen Fenster oder eben einem seperaten TAB öffnet.

Patrick Gotthardt 20.03.2005 12:59

Ist auch die beste Lösung. ;)
Ich hasse es, wenn die Links sich von selbst in nem neuen Fenster öffnen.

Der Vorteil der Javascript-Lösung ist dann existent, wenn man den User selbst entscheiden lässt, ob Links in nem neuen Fenster geöffnet werden sollen oder nicht.
Ist über Cookies ziehmlich einfach.

Acyd Burn 20.03.2005 13:03

Zitat:

Zitat von Reimer
Durch die Verwendung von Javascript rennt ihr genau in die falsche Richtung, die man mit XHTML Strict eingehen wollte. Der Sinn der Entfernung von target war es, dass der Nutzer am Browser selber entscheiden kann, ob er ein neues Fenster öffnet oder ob er im aktuellen Fenster weiter surft.

Ja, aber leider sehen das einige "Entwickler" ganz anders und wollen eben genau das Gegenteil. Ich möchte auf meinen Seiten z.B. das sich externe Seiteninhalte (also fremde Seiten) in einem neuem Fenster öffnen, Links auf die gleiche Seite aber nicht.

Zitat:

Durch die Korrektur via Javascript wird aber genau diese Idee wieder verworfen. Ich, als erfahrener Nutzer, kenne nur zu häufig das Problem, dass sich ein Fenster öffnet ohne meinen Willen. Das stört und ist nicht in meinem Sinn.
Ich hätte ehrlich gesagt nichts dagegen wenn alle Fenster in einem neuem Fenster geöffnet werden und es die Option "Open in same window" geben würde. ;)

Aber hast schon Recht, man sollte dem User so viel Freiraum wie möglich geben...

Zitat:

Sollte man denoch auf strict setzen, so sollte man einfach strict um das Attribute erweitern. Das W3 gibt die Möglichkeit eigene DTD zu erstellen, so dass man als Basis strict nimmt und Anker um das Attribute target erweitert.
Ich glaube da verwechselst du das mit XHTML 1.1, welches genau aus dem Grund der Erweiterbarkeit der DTD geschaffen wurden, allerdings nicht oft genutzt wird da bei XHTML 1.1 (wenn man es richtig machen möchte) der mimetype auf application/xml+xhtml gesetzt werden muss (und dieser mimetype wird vom ie nicht unterstützt).

Acyd Burn 20.03.2005 13:06

Hmm, ich merke gerade das der Topictitle "XHTML 1.1" heißt. :) Naja, das nutze ich nun nicht (weil ich dann auch gerne den richtigen mimetype verwenden möchte), eher XHTML 1.0 Strict (bei 1.1 gibt es kein Transitional, es ist von vornherein strict, muss also nicht explizit angegeben werden)...

TRS 20.03.2005 13:44

Zitat:

Zitat von Acyd Burn
Ja, aber leider sehen das einige "Entwickler" ganz anders und wollen eben genau das Gegenteil. Ich möchte auf meinen Seiten z.B. das sich externe Seiteninhalte (also fremde Seiten) in einem neuem Fenster öffnen, Links auf die gleiche Seite aber nicht.

Natürlich steht es einem Webdesigner frei fremde Inhalte in einem neuem Fenster zu öffnen. Der Punkt ist jedoch, dass der Nutzer es entscheiden soll und nicht der Webdesigner. Wer sagt denn, dass ich fremde Inhalte in einem neuen Fenster geöffnet haben will?

Zitat:

Zitat von Acyd Burn
Ich hätte ehrlich gesagt nichts dagegen wenn alle Fenster in einem neuem Fenster geöffnet werden und es die Option "Open in same window" geben würde. ;)

Jeder hat sicherlich seine Vorlieben, aber wenn ich auf einer Seite einen gesuchten Verweis gefunden habe, ist der Referenzseite erfüllt. Warum muss dann noch einmal die Referenzseite zusätzlich schließen?

Zitat:

Ich glaube da verwechselst du das mit XHTML 1.1, welches genau aus dem Grund der Erweiterbarkeit der DTD geschaffen wurden, allerdings nicht oft genutzt wird da bei XHTML 1.1 (wenn man es richtig machen möchte) der mimetype auf application/xml+xhtml gesetzt werden muss (und dieser mimetype wird vom ie nicht unterstützt).
Es war schon immer möglich das DTD Module an seine Wünsche anzupassen und seit man mit XHTML in Richtung XML geht, ist dieses Thema wieder aktueller geworden und wird heftig diskutiert.

Du kannst einfach anstatt http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd eine eigene Definition verwenden und so eingene Attribute und Tags zu deiner Website hinzufügen, wobei die Unterstützung der Browser natürlich zu beachten wäre.

Durch eine eigene DTD Definition wäre es möglich, dass das target bei Links nach wie vor zulässt und die Seite weiterhin valide ist.

Acyd Burn 20.03.2005 14:21

Zitat:

Es war schon immer möglich das DTD Module an seine Wünsche anzupassen und seit man mit XHTML in Richtung XML geht, ist dieses Thema wieder aktueller geworden und wird heftig diskutiert.

Du kannst einfach anstatt http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd eine eigene Definition verwenden und so eingene Attribute und Tags zu deiner Website hinzufügen, wobei die Unterstützung der Browser natürlich zu beachten wäre.

Durch eine eigene DTD Definition wäre es möglich, dass das target bei Links nach wie vor zulässt und die Seite weiterhin valide ist.
Das weiß ich durchaus (ist ja nur ein Link. ;)), aber mit XHTML 1.1 wollte man dieses erleichtern (mit den Modulen):

Zitat:

Zitat von http://www.w3.org/MarkUp
XHTML 1.1 is an example of a larger build of the modules, avoiding many of the presentation features. While XHTML 1.1 looks very similar to XHTML 1.0 Strict, it is designed to serve as the basis for future extended XHTML Family document types, and its modular design makes it easier to add other modules as needed or integrate itself into other markup languages.


LonelyPixel 20.03.2005 16:20

Ich hab mich gegen target= entschieden. Manchen gefällt das gar nicht, ist mir aber egal. Dafür ist es XHTML. Und ich öffne externe Links auch nicht unbedingt gerne immer in nem neuen Fenster. Zum Einen kann ich so schnell irgendwo durchklicken und nen Pfad zum x. Mal verfolgen, ohne dass ich am Ende gleich 10 Fenster (nein, Tabs) auf hab und zum Anderen gibt's doch schöne Funktionen wie FastRewind (zurück zur letzten Domain), die einem das Rückkehren einfacher machen.

Und den Contenttype kann man durchaus korrekt setzen. Man muss eben nur den Accept-Content-type Header im HTTP Request (oder wie das Ding nun heißt) auswerten und sich was passendes raussuchen. Dafür gibt's das ja alles. OK, braucht PHP oder ne Skriptsprache, mit statischen HTML-Dateien geht es vllt nicht so einfach.

OrcaDesign 20.03.2005 17:23

Zitat:

Zitat von LonelyPixel
Und den Contenttype kann man durchaus korrekt setzen. Man muss eben nur den Accept-Content-type Header im HTTP Request (oder wie das Ding nun heißt) auswerten und sich was passendes raussuchen. Dafür gibt's das ja alles. OK, braucht PHP oder ne Skriptsprache, mit statischen HTML-Dateien geht es vllt nicht so einfach.

Da kann ich aus Erfahrung sprechen und sagen, daß selbst das eine lösbare Aufgabe ist: ich hab's über htaccess gelöst:
Code:

RewriteEngine On
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule .* - "[T=application/xhtml+xml; charset=ISO-8859-1]"

Nicht schön und auch eine kleine Vergewohltätigung des RewriteMods... aber das Ergebnis ist das, was ich erreichen wollte: Browser, die mit XHTML etwas anzufangen wissen, bekommen die Seite auch als echtes XHTML ausgeliefert.

LonelyPixel 20.03.2005 18:29

Uh, OK, das kannte ich noch nicht. Gut, wäre das auch geklärt. ;)

Edit: Danke schön! Das hat mir jetzt tatsächlich bei nem anderen Problem geholfen, bei dem Dateien als UTF-8 ausgegeben werden müssen, was der Browser so nicht akzeptiert hat... :)

Philipp Gérard 21.03.2005 20:40

Wenn der Browser UTF-8 nicht ausgeben will, hilft meist schon ein korrekter header()-Befehl per PHP :). Obige Lösung sieht aber hübsch aus...

TRS 21.03.2005 21:11

Zitat:

Zitat von Philipp Gérard
Wenn der Browser UTF-8 nicht ausgeben will, hilft meist schon ein korrekter header()-Befehl per PHP :). Obige Lösung sieht aber hübsch aus...

Das musste ich auch erstmal lernen (http://annevankesteren.nl/archives/2004/06/utf-8) und hatte bis dahin den Fehler bei MySQL gesucht :D

StGaensler 22.03.2005 14:04

Zitat:

Zitat von TheDragonMaster
Der Vorteil der Javascript-Lösung ist dann existent, wenn man den User selbst entscheiden lässt, ob Links in nem neuen Fenster geöffnet werden sollen oder nicht.
Ist über Cookies ziehmlich einfach.

Ich will aber nicht bei jeder Seite erst die Einstellungen tätigen müssen, wie ich was sehen will, und außerdem will ich das bei jedem Link selbst entscheiden, ob ich die Seite im selben Fenster (Klick mit linker Maustaste) oder in einem neuen Tab (Klick mit mittlerer Maustaste) sehen will.

Ich schreibe zwar noch in HTML 4.01 (Strict), aber ich gebe bei meinen Links nie ein Target an, da ich den Benutzer selbst entscheiden lassen will.

Aber selbst, wenn ihr die Links mit noch so vielen target=_blank verziert, ihr werdet meinen Browser nicht dazu bekommen, ein neues Fenster auf zu machen :) Ich liebe Mozilla :D

DJ Iltiz 23.03.2005 11:15

Hi!

Klar, Opera macht die auch im elben Fenster, halt als neues Tab, auf. Aber bei externen Links bin ich - bis auf Suchmaschinen - das Öffnen im neuen Fenster gewohnt. Und nachher findet der User gar nicht mehr zurück? Schließt die Seite, aber die ursprüngliche ist dadurch auch weg...

MfG
DJ Iltiz

TRS 23.03.2005 11:27

Zitat:

Zitat von DJ Iltiz
Und nachher findet der User gar nicht mehr zurück? Schließt die Seite, aber die ursprüngliche ist dadurch auch weg...

Ich denke, dass die Umstellung eines Nutzers schnell ablaufen wird. Das passiert ihm vielleicht einmal, zweimal - aber spätestens beim dritten Mal wird er lernen, dass er Fenster im neuem Fenster öffnen muss.

Deathfragger 23.03.2005 17:23

Zitat:

Zitat von Reimer
Ich denke, dass die Umstellung eines Nutzers schnell ablaufen wird. Das passiert ihm vielleicht einmal, zweimal - aber spätestens beim dritten Mal wird er lernen, dass er Fenster im neuem Fenster öffnen muss.

Das denke ich nicht - vor allem "ältere" Leute die sich nur hin und wieder mit dem Internet beschäftigen werden dadurch sicherlich OFT die Übersicht verlieren bis sie damit wirklich zurecht kommen.

DJ Iltiz 24.03.2005 09:31

Und das ginge auch nur, wenn alle oder zumindest ein Großteil der Seiten dies z.B. am 1.1.2006 einführen würde. Denn mal so oder mal so ist nicht so toll. Und solange die meisten Seiten externe Links in nem neuen Fenster öffnen, sehe ich dies als größte Hürde, mich diesem Standard zu "verschließen"...

MfG
DJ Iltiz

StGaensler 24.03.2005 09:39

Das ist halt ein "Problem" im Internet.
Aber wenn nicht irgendwer damit anfängt, werden wir nie an das "Ziel" kommen.

Wenn es nach mir ginge, bräuchte das Web nur noch HTML 4.01 (Strict)- oder XHTML 1.x (auch Strict)-Seiten zu haben. Frames braucht keiner, das kann man alles mit CSS machen. Dann noch einen Browser, der das alles auch korrekt darstelt (Nicht den IE :D) und schon würde das alles passen *träum*

Ich glaube, ich muss aber wieder auf den Boden der Tatsachen zurück ;)

LonelyPixel 24.03.2005 10:00

Zitat:

Zitat von DJ Iltiz
Und nachher findet der User gar nicht mehr zurück? Schließt die Seite, aber die ursprüngliche ist dadurch auch weg...

Folgende Extensions für den Firefox sind dabei sehr praktisch:
Rewind/Fastforward Buttons
Undo Close Tab
(http://unclassified.de?firefox-ext)

StGaensler 24.03.2005 10:07

Da kenne ich noch eine bessere Extension: http://mozilla.incubo.de/
Ist aber mit Vorsicht zu genießen. Die ist nicht ganz sauber programmiert (wird deshalb auch nicht auf update.mozilla.org verlinkt/angeboten), und hat so ihre Tücken.
Für den Durchschnitts-Websurfer aber erste Sahne.

LonelyPixel 24.03.2005 16:38

Dieses "... und vieles mehr" ist es genau, das mich daran so abschreckt. Ich hatte anfangs eine Weile lang die Tabbrowser Extensions (das Original von dem aus Japan, Link müsste auf meiner Seite irgendwo sein) und das ist nach ner Weile so dermaßen lahm geworden und hat sich mit allen möglichen anderen Extensions gezofft, dass ich mir dann die einzelnen Teile davon gesucht hab, die nur genau das machen, was ich überhaupt haben will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25