Calocybe: target="_blank" for HTML Strict pages

(In reply to http://forum.de.selfhtml.org/archiv/2002/6/15222/ and any other threads about this topic.)

Moin Leuts!

Leider war ich etwas zu langsam, um diesen Beitrag noch im gerade entschwundenen Thread zu bringen. Aber naja.

Ich halte zwar die Notwendigkeit des Oeffnens neuer Fenster bei Verwendung von HTML Strict nach wie vor fuer Nonsens, moechte aber mal diesen Kompromissvorschlag bringen, der neue Fenster mit JS oeffnet -- doch der Reihe nach:

Considerations

Wie wir in einer der vergangenen Diskussionen eroertert haben, ist target="_blank" kein logik-strukturierendes Attribut und gehoert daher nicht in die Strict-Variante von HTML. Jedoch wird bei der Verwendung oftmals eine logische Bedeutung impliziert, naemlich die, dass der Link zu einer anderen Website fuehrt, also extern ist.

Zur Kennzeichnung fuer diesen logischen Zusammenhang bietet HTML durchaus ein Mittel: das REL-Attribut des A-Elements. Lediglich ein standardisierter Wert fuer die externe Relation ist noch nicht verfuegbar; anbieten wuerde sich etwa rel="extern" oder rel="offsite".

Die Umsetzung in ein konkretes Verhalten bei fensterbasierten grafischen Browsern faellt imho in dieselbe Kategorie wie das realisieren einer browserbasierten Anwendung, oder anders formuliert, das Oeffnen eines neuen Fensters stellt bereits eine ganz kleine web-basierte Applikation dar (und daher ist fuer mich der Wunsch nach Verwendung von HTML Strict in diesem Zusammenhang nicht nachvollziehbar, denn Stricts einziger Zweck ist die Beschreibung einer Textstruktur). Ueber Web-Applikationen auf Basis von HTML habe ich noch mal eine gesonderte Meinung zu bieten, wie der regelmaessige Forumsbesucher weiss, aber das soll mal hier nicht interessieren. Wichtig ist die Feststellung, dass fuer die Realisierung von Web-Applikationen JavaScript zustaendig ist, nicht HTML oder CSS.

Das soll insgesamt heissen, in einer Welt der sauberen Trennung von Textstruktur, Design und Automation/Programmierung kennzeichnet rel="offsite" im A-Element einen externen Link, waehrend mit JS dafuer gesorgt wird, dass sich solche Links in einem neuen Fenster oeffnen. Dieses Ergebnis ist auch fuer mich ueberraschend, da ich ja eigentlich Gegner von solchem JS-Firlefanz bin, aber target="_blank" ist ja imho auch in den seltensten Faellen sinnvoll. Somit bekommt man eine bescheuerte Loesung fuer ein bescheuertes Problem, die sich aufgrund der Logik aber aufdraengt. (<-- Das mit der Logik, also die obige Ueberlegung, steht natuerlich zur Diskussion!)

Implementation

Wish list:
    * Die Implementierung soll natuerlich so geschehen, dass Besucher
      mit nicht-JavaScript-begabten Browsern keinerlei
      Einschraenkungen haben.
    * Die neu geoeffneten Fenster sollen genauso aussehen, wie wenn
      sie von target="blank" erzeugt worden waeren, insbesondere
      sollen nicht saemtliche Toolbars fehlen oder die Fenster nicht
      mehr resizable sein, wie man es von den nervigen JS-Popups kennt.
    * Ausserdem muss derselbe Link bei mehrmaliger Betaetigung immer
      wieder neue Fenster hervorbringen, keinesfalls bestehende
      wiederverwenden.
    * Und die Fenstergroesse soll die sein, die der Browser auch fuer
      ein _blank-Fenster waehlen wuerde.
    * Schliesslich sollte idealerweise der bestehende HTML-Code nicht
      veraendert werden muessen (nachdem REL="offsite" drinsteht).

Letzteres ist kein Problem. Die gaengige Praxis, Event-Handler mitten im HTML-Code als OnXXX-Attribut hinzuschreiben, ist ja sowieso nur ein Shortcut fuer das richtige Setzen von Event-Handlern in JavaScript. Dort geschieht das durch Zuweisen einer Funktion an die onXXX-Eigenschaft eines Objektes. Wir koennen die Aufgabe also ausschliesslich in JS abwickeln.

Das Simulieren eines _blank-Fensters sollte meinem beklagenswerten Wissensstand nach durch Aufruf von window.open() mit der URL als einzigem Argument zu bewerkstelligen sein.

Es ist zu beruecksichtigen, dass REL mehrere, durch Space separierte, Relationships enthalten kann.

Beispielcode (see this in action at http://selfworld.calocybe.dyndns.org/ftmp/offsite-links.html (sorry, lame connection these days)):

/*  (C) Copyright 2002 by Calocybe Creations
     *  This code is in the public domain, that is to read, you are free
     *  to use it without any restriction.
     */

/* this is the event handler */
    function OnOffsiteLinkClick() {
        window.open(this.href);
        return false;     /* cancel the default click action */
    }

/*  AttrListContains(list, value);
     *  Checks if the space-separated list of values 'list' contains 'value'.
     *  This is useful for implementing a selection  equivalent to the CSS2 selector E[list~="value"] .
     *  Works case-insensitively.
     */
    function AttrListContains(list, value) {
        var i, split;

if (typeof(list) == "undefined" || list == null) return 0;
        if (!(list = list.toString()).length) return 0;

split = list.split(" ");
        for (i=0; i < split.length; i++)
            if (split[i].toLowerCase() == value.toLowerCase()) return 1;

return 0;
    }

function AssignLinkClickHandler() {
        var i, l, anchors;

if (!(window.document.getElementsByTagName && String.prototype.split && window.open))
            /* sorry, your user agent sucks! */
            return;

anchors = window.document.getElementsByTagName("a");

for (i=0; i < anchors.length; i++) {
            l = anchors[i];
            if (
              l.getAttribute("href") &&                             /* is a link, not merely an anchor */
              AttrListContains(l.getAttribute("rel"), "offsite")    /* refers to an extern location */
            )
                l.onclick = OnOffsiteLinkClick;
        }
    }

Getestet mit Mozilla 1.0.0. Testberichte fuer andere Browser sind willkommen.

Advantages

Will man diese Methode fuer andere Zwecke als Offsite-Links einsetzen, kann man den Code leicht abaendern, um auf andere RELationships oder auch andere Attribute (insbesondere CLASS) zu reagieren.

Auf diese Weise kann man sogar den Benutzer mittels einer Checkbox waehlen lassen, ob er Offsite-Links in einem neuen Fenster haben moechte oder nicht, bei Bedarf also die OnClick-Handler setzen oder wieder entfernen. Implementing this is left as an exercise for the reader.

Know issues

Funktioniert in dieser Form nur bei Mausklick, nicht bei Linkaktivierung durch Tastatur. Ich vermute jedoch, wer mit der Tastatur navigiert, betrachtet das eher als Feature.

Funktioniert nur mit Browsern, die getElementsByTagName(), String.split() und window.open() verstehen (also die moderneren).

Falls bereits spezielle OnClick-Handler fuer manche Links gesetzt sind, werden diese mit diesem Code deaktiviert (bezieht sich nur auf solche mit REL="offsite"). Naja, ganz abgesehen von der Praxisrelevanz dieser Ueberlegung wird es dem geneigten Seitenautor nicht schwer fallen, den Code so abzuaendern, dass in solchen Faellen der alten Handler von dem neuen aus aufgerufen wird oder fuer solche Links der neuen Handler gar nicht erst installiert wird.

[Your comments go here.]

So long

--
Vergeben und vergessen heißt, gemachte kostbare Erfahrungen zum Fenster hinauswerfen.
    -- Arthur Schopenhauer

  1. (In reply to http://forum.de.selfhtml.org/archiv/2002/6/15222/ and any other threads about this topic.)

    hi Calo,

    Leider war ich etwas zu langsam, um diesen Beitrag noch im gerade entschwundenen Thread zu bringen.

    ja, schade. Hätte prima gepaßt

    Ich halte zwar die Notwendigkeit des Oeffnens neuer Fenster bei Verwendung von HTML Strict nach wie vor fuer Nonsens

    Ich hab in dem zitierten Thread nicht so ganz deutlich machen können, daß es mir gar nicht vorrangig um "strict" ging und geht, deinen Hinweis, wozu "strict" da ist, ist völlig ok. Mir gings eher um XHTML1.1, wo target="_blank" ja auch nicht mehr vorkommt.

    Zur Kennzeichnung fuer diesen logischen Zusammenhang bietet HTML durchaus ein Mittel: das REL-Attribut des A-Elements.

    In diese Richtung hatte ich zwar bereits gedacht, war aber nicht so weit gekommen wie du. Das hängt _auch_ damit zusammen, daß ich (und gewiß viele andere) das rel-Attribut bisher nahezu ausschließlich in Zusammenhang mit <link> kennengelernt habe

    Somit bekommt man eine bescheuerte Loesung fuer ein bescheuertes Problem, die sich aufgrund der Logik aber aufdraengt.

    bissel grob ausgedrückt, aber richtig. Leider wollen aber eben auch "bescheuerte" Probleme diskutiert sein ;-)

    Wish list:
        * Die Implementierung soll natuerlich so geschehen, dass Besucher
          mit nicht-JavaScript-begabten Browsern keinerlei
          Einschraenkungen haben.

    klar, "soll" so sein

    * Die neu geoeffneten Fenster sollen genauso aussehen, wie wenn
          sie von target="blank" erzeugt worden waeren, insbesondere
          sollen nicht saemtliche Toolbars fehlen oder die Fenster nicht
          mehr resizable sein, wie man es von den nervigen JS-Popups kennt.

    auch richtig, nur ist die Kombination beider Bedingungen bei deiner (übrigens ganz eleganten) Lösung die Kombination einander ausschließender Bedingungen. "nicht-JavaScript-begabte Browser" öffnen den Verweis zwar  -  aber nicht in einem "neuen" Fesnter. Habs gegengprüft mit Opera und IE 6

    Funktioniert nur mit Browsern, die getElementsByTagName(), String.split() und window.open() verstehen (also die moderneren).

    Da wir hier etwas diskutieren, was wahrsacheinlich  -  wenn überhaupt  -  erst in näherer Zukunft wichtiger werden wird, bin ich dafür, auf Browser vergangener Generationen keine Rücksicht mehr zu nehmen

    Grüße aus Berlin

    Christoph S.

    1. Hi,

      Zur Kennzeichnung fuer diesen logischen Zusammenhang bietet HTML durchaus ein Mittel: das REL-Attribut des A-Elements.

      besonders interessant finde ich die mögliche Kopplung zB an class="extern", was dann auch Besuchern mit nicht JS-fähigen Browsern hilft.

      * Die Implementierung soll natuerlich so geschehen, dass Besucher
            mit nicht-JavaScript-begabten Browsern keinerlei
            Einschraenkungen haben.

      Haben sie nicht, weil ihnen die Wahl bleibt, einen Link in einem externen Fenster zu öffnen.

      * Die neu geoeffneten Fenster sollen genauso aussehen, wie wenn
            sie von target="blank" erzeugt worden waeren, insbesondere
            sollen nicht saemtliche Toolbars fehlen oder die Fenster nicht
            mehr resizable sein, wie man es von den nervigen JS-Popups kennt.

      Opera 6 öffnet ein neues Fenster, allerdings ohne Adressleiste.

      ... "nicht-JavaScript-begabte Browser" öffnen den Verweis zwar  -  aber nicht in einem "neuen" Fesnter. Habs gegengprüft mit Opera und IE 6

      Darin liegt ja auch die Absicht - es gibt kein target.

      Alles in allem finde ich die Lösung ziemlich elegant, vorausgesetzt, dem Benutzer bleibt - wie auf der Demoseite - die Wahl.

      LG Orlando

      --
      SELF-TREFFEN 2002
      http://www.rtbg.de/selftreffen/
      http://www.megpalffy.org/temp/penneninhh.html

      1. Re-Hi!

        Opera 6 öffnet ein neues Fenster, allerdings ohne Adressleiste.

        All right, hab noch mal ein bisschen rumprobiert mit Opera 6.01. Mit
          window.open(URL, "", "location=1");
        scheint Opera ein normales _blank-Fenster aufzumachen. Ich habe aber die Voreinstellungen nicht weiter veraendert, ausser mal im MDI- (alle Kindfenster in einem Hauptfenster) und im SDI-Modus (eigenstaendige Hauptfenster wie bei den veralteten Browsern ueblich) zu probieren. Das ging in beiden ganz gut.

        Als Erkennung des Opera in JavaScript habe ich navigator.userAgent.toLowerCase().indexOf("opera") hergenommen, was glaube ich auch die Stealth-Operas erkennen muesste.

        Korrekturen dazu sowie weitere Testberichte mit verschiedenen Browsern (vor allem IE, ich habe naemlich keinen!) sind willkommen.

        Die Funktion AttrListContains() habe ich noch "slightly optimized". *g*

        Die aktualisierte Version habe ich wieder unter http://selfworld.calocybe.dyndns.org/ftmp/offsite-links.html hochgeladen. Fuer's Archiv kopier ich den Code nochmal hierher, denn das 'ftmp' in der Adresse steht fuer "temporaer", und so ist es auch gemeint.

        /*  (C) Copyright 2002 by Calocybe Creations
             *  This code is in the public domain, that is to read, you are free
             *  to use it without any restriction.
             */

        /* this is the event handler */
            function OnOffsiteLinkClick() {
                window.open(this.href);
                return false;     /* cancel the default click action */
            }

        /* this is an alternative event handler which is specially crafted for Opera */
            function OnOperaOffsiteLinkClick() {
                window.open(this.href, "", "location=1");
                return false;     /* cancel the default click action */
            }

        /*  AttrListContains(list, value);
             *  Checks if the space-separated list of values 'list' contains 'value'.
             *  This is useful for implementing a selection  equivalent to the CSS2 selector E[list~="value"] .
             *  Works case-insensitively.
             */
            function AttrListContains(list, value) {
                var i, split;

        if (typeof(list) == "undefined" || list == null) return 0;
                if (!(list = list.toString()).length) return 0;

        value = value.toLowerCase();
                split = list.toLowerCase().split(" ");

        for (i=0; i < split.length; i++)
                    if (split[i] == value) return 1;

        return 0;
            }

        function AssignLinkClickHandler() {
                var i, l, anchors;
                var opera;

        if (!(window.document.getElementsByTagName && String.prototype.split && window.open))
                    /* sorry, your user agent sucks! */
                    return;

        opera = navigator.userAgent.toLowerCase().indexOf("opera") >= 0 ? 1 : 0;

        anchors = window.document.getElementsByTagName("a");

        for (i=0; i < anchors.length; i++) {
                    l = anchors[i];
                    if (
                      l.getAttribute("href") &&                             /* is a link, not merely an anchor */
                      AttrListContains(l.getAttribute("rel"), "offsite")    /* refers to an extern location */
                    )
                        l.onclick = opera ? OnOperaOffsiteLinkClick : OnOffsiteLinkClick;
                }
            }

        So long

        --
        "Echte Programmierer rufen von einer Telefonzelle aus ihren Computer an und pfeifen das Executeable auf den Datenträger."

        1. Re-Hi!

          ebenfalls,

          Korrekturen dazu sowie weitere Testberichte mit verschiedenen Browsern (vor allem IE, ich habe naemlich keinen!) sind willkommen.

          ok, ich bin mit IE6 (WinXP), IE 5.5 (Win98SE) und IE5.0 (Win95) draufgegangen, funktioniert reibungslos  -  allerdings ist das, was bei deiner ersten Fassung noch bei einem link ein "_blank"-Fenster (also neues Fenster) öffnete, nicht mehr drin. Ich will nicht nochmal über den "Sinn" von "_blank" diskutieren, die Standpunkte (soll man dem Besucher überlassen") sind artikuliert, meiner auch ("soll an bestimmten Stellen dem Besucher nicht überlassen sein")

          Anmerkung: dein sehr ausführliches posting braucht eigentlich nur noch nen bißchen layoutet werden und wäre dann ein Feature-Artikel  -  oder?

          Grüße aus Berlin

          Christoph S.

          1. Re-Re! *g*

            ok, ich bin mit IE6 (WinXP), IE 5.5 (Win98SE) und IE5.0 (Win95) draufgegangen, funktioniert reibungslos  -  allerdings ist das, was bei deiner ersten Fassung noch bei einem link ein "_blank"-Fenster (also neues Fenster) öffnete, nicht mehr drin.

            Aeh, was jetzt? Oeffnet sich der FileZilla-Link in einem neuen Fenster (nachdem man den Button geklickt hat) oder nicht? Ich habe eigentlich nur die Extra-Routine fuer Opera dazugebaut und ansonsten nichts wesentliches veraendert.

            Anmerkung: dein sehr ausführliches posting braucht eigentlich nur noch nen bißchen layoutet werden und wäre dann ein Feature-Artikel  -  oder?

            Ich sehe es eher in der Tips&Tricks-Sektion, die hier demnaechst irgendwie entstehen soll. Zumindest den Teil mit dem Script. Die "Considerations" muesste ich vielleicht mal auf einer dieser W3C-Mailinglisten diskutieren. Mal sehen, was die in ihren Archiven so haben.

            So long

            --
            If Microsoft is ever going to produce something that does not suck, it is very likely a vacuum cleaner.

            1. hi,

              Aeh, was jetzt? Oeffnet sich der FileZilla-Link in einem neuen Fenster (nachdem man den Button geklickt hat) oder nicht? Ich habe eigentlich nur die Extra-Routine fuer Opera dazugebaut und ansonsten nichts wesentliches veraendert.

              wenn ich _erst_ den button und dann den filezilla-link mit der Maus anklicke, öffnet sich ein neues Fenster mit dem Linkziel  -  aber auch im _parent_-Fenster geht die angewählte Adresse auf  -  gilt für die drei angegebenen IE-Varianten.
              wenn ich _nicht_ den button klicke, öffnet sich die filezilla-Adresse im selben Fenster.

              Grüße

              Christoph S.

              1. Re!

                wenn ich _erst_ den button und dann den filezilla-link mit der Maus anklicke, öffnet sich ein neues Fenster mit dem Linkziel  -  aber auch im _parent_-Fenster geht die angewählte Adresse auf  -  gilt für die drei angegebenen IE-Varianten.

                Na das ist Mist. Bist Du sicher, dass das bei der urspruenglichen Version nicht auch schon so war? Denn offensichtlich ignoriert der IE das return false im Handler; das stand vorher aber schon genauso da. Tja, aber wie macht man das nun wieder im IE, dass der dem eigentlichen HREF nicht mehr folgt? *gruebel*

                Uebrigens habe ich diese URLs gefunden, die Dich bzgl. XHTML 1.1 interessieren duerften. Was Stefan Einspender angedeutet hatte, das mit der Modularisierung, wenden einige offenbar schon an.
                http://www.w3.org/TR/xhtml-modularization/#contents  (5.12.)
                http://lists.w3.org/Archives/Public/www-html/2002Feb/0107.html
                http://lists.w3.org/Archives/Public/www-html/2002Mar/0025.html

                HTH && So long

                --
                a[target="_blank"] { display:none; }  /*  ;-)  */

                1. Re:

                  Na das ist Mist. Bist Du sicher, dass das bei der urspruenglichen Version nicht auch schon so war?

                  also wenn du _so_ fragst, muß ich etwas kleinlaut zugeben, daß ich nicht 100prozentig "sicher" bin. Ich hab munter drauflosgeklickert, und mit dem ...zilla-link hatte es sofort, als ich ihn das erstemal angeklickt habe, mit einem neuen Fenster hingehauen (_das_ ist sicher)  -  aber ich bin nicht mehr sicher, ob ich da _vorher_ auf deinen button geklickt hatte.

                  Denn offensichtlich ignoriert der IE das return false im Handler; das stand vorher aber schon genauso da.

                  wirklich ausschließen kann ich nur, daß bei mir noch irgendwas im Browser-Cache rumgelegen haben könnte. Darauf zu achten, hab ich gelernt.

                  Uebrigens habe ich diese URLs gefunden, die Dich bzgl. XHTML 1.1 interessieren duerften. Was Stefan Einspender angedeutet hatte, das mit der Modularisierung, wenden einige offenbar schon an.
                  http://www.w3.org/TR/xhtml-modularization/#contents  (5.12.)
                  http://lists.w3.org/Archives/Public/www-html/2002Feb/0107.html
                  http://lists.w3.org/Archives/Public/www-html/2002Mar/0025.html

                  sehr interessant, ich schau mir das gründlich an, danke

                  gute Nacht

                  Christoph S.

                2. Hallo, Calocybe,

                  Dein "Hack" ist schön gemacht und äußerst durchdacht, wirklich interessant... aber bitte gib es auf. :) Ich kann beim besten Willen nicht verstehen, wieso man derartige Anstrengungen unternimmt, um in erster Linie XHTML Strict und target zu vereinbaren. Wie du sagtest, bescheuertes Problem. Ich bin ja, wie viele hier, der fundamentalen Meinung, dass target weder mit XHTML Strict noch mit meinem persönlichen Empfinden von richtigem Code vereinbar ist. "Habe Mut, dich des Transitional-Standards zu bedienen" (frei nach Kant). :) Alles andere ist nur blinder und angeberischer Standardfetischismus à la "XHTML 1.1? - na klar, ich auch!". (Nicht auf dich bezogen, Christoph.)
                  Obwohl ich dieses benutzergewählte "Alle externen Links als Popups öffnen" mag, das habe ich schon einmal auf *nachdenk* bloghaus.de gesehen. Besser als den Benutzer generell durch ein kompromissloses target="_blank" zu bevormunden ist es auf jeden Fall.

                  Orlando hatte das Problem mit der Adressleiste/Locationbar angesprochen - für meinen Opera 6.03 müsste man wohl auch scrollbars explizit auf 1 setzen, denn die fehlen bei mir... vielleicht wurde es schon angemerkt und ich hab's nur übersehen.

                  --
                  a[target="_blank"] { display:none; }  /*  ;-)  */

                  Ganz so radikal muss es ja nicht sein:

                  Stefan Einspender in http://forum.de.selfhtml.org/archiv/2002/6/15222/#m85024:

                  Ich bin froh, dass es in Mozilla die Möglichkeit gibt,
                  target="_blank" generell zu unterbinden. Bei anderen Browsern
                  stelle ich erst beim Anklicken eines Links fest, ob der Ersteller
                  mir da ein neues Fenster aufzwingt :-/

                  Ich sehe das nicht so eng. http://dj5nu.bei.t-online.de/css-attributvisualisierung.html - ein bisschen kann man auch im Opera machen. Benutzerstylesheets sind eine feine Sache.
                  Wenn man ein wenig Kontrolle über target und Popups haben möchte, kann man natürlich nicht den Internet Explorer verwenden (der sich m.E. nichts Benutzeragent nennen darf). Ich sage nur: frameless windows.

                  Mathias

                  1. Yoh hi!

                    Dein "Hack" ist schön gemacht und äußerst durchdacht, wirklich interessant... aber bitte gib es auf. :) Ich kann beim besten Willen nicht verstehen, wieso man derartige Anstrengungen unternimmt, um in erster Linie XHTML Strict und target zu vereinbaren.

                    Sieh es mal so, mit Deiner Popup-Anleitung wolltest Du doch auch diejenigen, die es mit den Popups einfach nicht lassen koennen, wenigstens auf den sauberst-moeglichen Weg fuehren, das zu realisieren. Das war hier auch meine Intention. Jedoch finde ich mittlerweile die Sache mit Angebot per Checkbox ein nettes Gimmick, das keinen stoeren sollte, der es nicht nutzt.

                    Alles andere ist nur blinder und angeberischer Standardfetischismus à la "XHTML 1.1? - na klar, ich auch!". (Nicht auf dich bezogen, Christoph.)

                    Finde ich ja auch.

                    Orlando hatte das Problem mit der Adressleiste/Locationbar angesprochen - für meinen Opera 6.03 müsste man wohl auch scrollbars explizit auf 1 setzen, denn die fehlen bei mir... vielleicht wurde es schon angemerkt und ich hab's nur übersehen.

                    Ja, ich muss das alles nochmal durchtesten mit verschiedenen Browsern und dann speziell angepasste Handler erstellen. Aber heute nicht, da ich irgendwie ploetzlich voll erkaeltet bin, meine Nase in einer einzige Dauerexplosion zerspringt und ich keinen klaren Gedanken fassen kann.

                    Aber ein weiteres Problem, was mir eingefallen ist, ist dass der Handler gar nicht prueft, welche Maustaste gedrueckt wurde und in dem ein oder anderen Browser vermutlich auch bei der rechten Taste sein Ding durchzieht. Da gibt's also wohl noch einiges zu tun.

                    Stefan Einspender in http://forum.de.selfhtml.org/archiv/2002/6/15222/#m85024:

                    Ich bin froh, dass es in Mozilla die Möglichkeit gibt,
                    target="_blank" generell zu unterbinden.

                    Hab ich auch angeschaltet. :-)

                    Wenn man ein wenig Kontrolle über target und Popups haben möchte, kann man natürlich nicht den Internet Explorer verwenden (der sich m.E. nichts Benutzeragent nennen darf). Ich sage nur: frameless windows.

                    Was ist das denn?

                    So long

                    --
                    Life is complex. It has real and imaginary parts.

                    1. hallo ihrs ;-)

                      Sieh es mal so, mit Deiner Popup-Anleitung wolltest Du doch auch diejenigen, die es mit den Popups einfach nicht lassen koennen, wenigstens auf den sauberst-moeglichen Weg fuehren

                      ich weiß nicht, ob da nicht ein grundlegendes Mißverständnis vorliegt. Mir geht es _nicht_ um popup-Fenster, also um die Dinger, die gleich mit aufspringen, wenn ich eine Adresse anklicke und sich manchmal hrtnäckig gegen ein Schließen wehren. "popups" finde ich perfide und ärgerlich  -  aber das ist eben nicht dasselbe wie "target='_blank'"

                      Alles andere ist nur blinder und angeberischer Standardfetischismus à la "XHTML 1.1? - na klar, ich auch!". (Nicht auf dich bezogen, Christoph.)

                      schon gut ... wir wollen ja möglichst Klartext reden/schreiben, und wenn ich mich angegriffen fühlen würde, wäre ich auch in der Lage, "zurückzubeißen" ;-) Es geht mir auch gar nicht um irgendwelchen "Fetischismus", ich _muß_ nicht unbedingt XHTML1.1 schreiben. Aber ich wollte/will es einfach wissen, weil ich in der Regel auch das verstehen möchte, was ich am Ende dann vielleicht doch nicht einsetze. Und im Forum hier gehts letzten Endes um die "Energie des Verstehens"

                      Ja, ich muss das alles nochmal durchtesten ... Aber heute nicht, da ich irgendwie ploetzlich voll erkaeltet bin, meine Nase in einer einzige Dauerexplosion zerspringt und ich keinen klaren Gedanken fassen kann.

                      och, dann wünschen wir mal alle schnell gute Genesung

                      Grüße aus Berlin

                      Christoph S.

                      1. Do-Re-Mi-Hi ;)

                        "popups" finde ich perfide und ärgerlich  -  aber das ist eben nicht dasselbe wie "target='_blank'"

                        Das eine ist Javascript, das andere HTML - das Ergebnis ist das gleiche...

                        Zu http://selfworld.calocybe.dyndns.org/ftmp/offsite-links.html:

                        Scheinbar öffnet Opera von JS erzeugte Fenster generell ohne Adressleiste, weil dies bei einem PopUp keinen Sinn macht. Ich habe jetzt einige Zeit gesucht, aber dazu leider keine eindeutige Aussage gefunden.

                        BTW, lässt sich "Das System verfügt nur noch über wenige Ressourcen" irgendwie abfangen? ;p

                        LG Orlando

                        --
                        SELF-TREFFEN 2002
                        http://www.rtbg.de/selftreffen/
                        http://www.megpalffy.org/temp/penneninhh.html

                      2. Hallo, Christoph,

                        Sieh es mal so, mit Deiner Popup-Anleitung wolltest Du doch auch diejenigen, die es mit den Popups einfach nicht lassen koennen, wenigstens auf den sauberst-moeglichen Weg fuehren
                        ich weiß nicht, ob da nicht ein grundlegendes Mißverständnis vorliegt. Mir geht es _nicht_ um popup-Fenster [...]

                        Das wollte Calocybe dir auch nicht unterstellen, wie ich ihn verstanden habe. Er wollte nur die Intention seines Hacks mit dem meines Popup-Howtos vergleichen - beide versuchen Kompromisslösungen aufzuzeigen (in Rolands Fall der Kompromiss zwischen target="_blank" und XHTML Strict und in meinem Fall des Popup-Howtos der Kompromiss zwischen JavaScript-Popups und Zugänglichkeit) - und zwar denjenigen, die nicht auf target im einen bzw. Popups im anderen Fall verzichten möchten.

                        Alles andere ist nur blinder und angeberischer Standardfetischismus à la "XHTML 1.1? - na klar, ich auch!". (Nicht auf dich bezogen, Christoph.)
                        schon gut ... wir wollen ja möglichst Klartext reden/schreiben, und wenn ich mich angegriffen fühlen würde, wäre ich auch in der Lage, "zurückzubeißen" ;-)

                        Das war in erster Linie wirklich nicht auf dich bezogen, denn ich kenne ja deine Prinzipien im Bezug auf externe Links, um die es hier im speziellen geht. (Diese Meinung teile ich zwar nicht, ich kann sie aber nachvollziehen - es ist, solange es nicht die Freiheit der Benutzer einschränkt[*], eine freie persönliche Entscheidung.)

                        [*] *verschmitzt grins*...

                        Es geht mir auch gar nicht um irgendwelchen "Fetischismus", ich _muß_ nicht unbedingt XHTML1.1 schreiben.

                        Genau deswegen verstehe ich nicht, wieso du nicht einfach eine Transitional-DTD setzt, womit obskure Alternativen erst gar nicht nötig wären. "Dafür muss man sich nicht schämen." ;) "Ich habe es selbst getan - damals." ;))
                        Mal im Ernst: Für mich ist jede valide Seite gleich qualitativ hochwertig, ob es nun HTML 4.01 oder XHTML 1.1 ist. Wenn es einen sinnvollen Grund gibt (und der ist hier imho gegeben) weicht man halt auf den Transitional-Standard aus - da ist nichts dabei. Für mich ist der Unterschied zwischen XHTML 1.1 und XHTML 1.0 Transitional erst einmal nur ein paar dutzend Byte Code, ansonsten sehe ich keine nennenswerte offensichtliche/merkbare Unterschiede/Vorteile, eher Nachteile für die Kompatibilität.
                        (Soviel sagt die Standardkonformität auch nicht aus, man kann grässliches Markup schreiben, welches der W3C Validator absegnet. Solche Fehler erkennt vielleicht erst ein Accessibility-Tester wie Bobby oder nur eine Menschmaschine.)

                        Aber ich wollte/will es einfach wissen, weil ich in der Regel auch das verstehen möchte, was ich am Ende dann vielleicht doch nicht einsetze. Und im Forum hier gehts letzten Endes um die "Energie des Verstehens"

                        Hm; ich denke, Nachteile und Probleme sowie Vorteile von target="_blank" wurden schon zur Genüge diskutiert, sodass man imho eine Entscheidung für sich treffen kann - wenn target, dann Transitional; ich sehe keinen Grund, wieso man target und Strict-DTD unter einen Hut quetschen müsste.
                        Ich kann, wie gesagt, das Problem nicht nachvollziehen bzw. finde es "eher weniger" relevant um sich ausgiebig damit zu beschäftigen.

                        Mathias

                    2. Hallo, Roland,

                      Ich kann beim besten Willen nicht verstehen, wieso man derartige Anstrengungen unternimmt, um in erster Linie XHTML Strict und target zu vereinbaren.

                      Sieh es mal so, mit Deiner Popup-Anleitung wolltest Du doch auch diejenigen, die es mit den Popups einfach nicht lassen koennen, wenigstens auf den sauberst-moeglichen Weg fuehren, das zu realisieren. Das war hier auch meine Intention.

                      okay, ich verstehe schon was du meinst, da gebe ich dir vollkommen Recht. Wobei ich froh bin, wenn ich eine handvoll Newbies von href="javascript:... auf onclick bringen kann, aber du entwickelst eine höchst ausgereifte Lösung für die, die sich schon bis XHTML Strict vorgearbeitet haben - die müssten die Sinnlosigkeit eigentlich einsehen (zumindest die des target-Attributs). Insofern sind unsere Zielgruppen unähnlich...
                      (Immer diese nihilistischen Untertöne, ich kann einfach nie beim Thema bleiben, ts... ;))
                      Ich sagte auch "um in erster Linie XHTML Strict und target zu vereinbaren", denn als Kompromisslösung für das _blank-Problem an sich finde ich die Lösung begrüßenswert - wie alles, was die Entscheidungsfreiheit des Benutzer vergrößert.

                      [Fensteroptionen/window.open()-Parameter]
                      Ja, ich muss das alles nochmal durchtesten mit verschiedenen Browsern und dann speziell angepasste Handler erstellen. Aber heute nicht, da ich irgendwie ploetzlich voll erkaeltet bin, meine Nase in einer einzige Dauerexplosion zerspringt und ich keinen klaren Gedanken fassen kann.

                      ...mei-nen Verstaaaa-aaa-aand zurück... :)
                      http://www.tocotronix.de/texte/a_beschweren.html#verstand

                      Aber ein weiteres Problem, was mir eingefallen ist, ist dass der Handler gar nicht prueft, welche Maustaste gedrueckt wurde und in dem ein oder anderen Browser vermutlich auch bei der rechten Taste sein Ding durchzieht. Da gibt's also wohl noch einiges zu tun.

                      Wenn ich mal prognostizieren darf: irgendein Browser wird trotz allen aus der Reihe tanzen und irgendeine Eventualität bleibt immer unbedacht. "Nichts für ungut", aber ich sehe immer noch keine Relation zwischen nicht Nutzen und Mühe... okay okay, ich bin ruhig. :)

                      Ich sage nur: frameless windows.
                      Was ist das denn?

                      Das ist eine Missbrauchsmöglichkeit der Vollbild-Funktion im Internet Explorer. Zuerst öffnet man ein Fenster mittels window.open, welches den Vollbild/Kiosk-Modus hat, also den kompletten Bildschirm ausfüllt (für Millisekunden blitzt der Bildschirm komplett weiß auf). Nun verkleinert man das Fenster und verschiebt es wie man möchte. (Es ist ein ordinäres Fenster, nur ohne Titelleiste, Menüleiste, Scrollleisten etc. - einfach ein nicht erkennbarer Bereich ohne Begrenzungen, der auf dem Bildschirm auftaucht und in dem sich eine Seite lädt.)

                      fensterobj=window.open("murks.html", "murks", "fullscreen=yes,scrollbars=no");
                      fensterobj.resizeTo(320,200);
                      fensterobj.moveTo(100,100);

                      Aus dem Ursprungsfenster kann man natürlich alles möglich im nicht als Fenster erkennbaren Fenster manipulieren: fensterobj.document.write("..."); oder fensterobj.location.href="[url]"; usw.

                      Das Fenster lässt sich nur mit Fokus und Alt+F4 schließen; es taucht zwar in der Taskleiste auf, kann aber dort nicht geschlossen werden. Sonstige Steuerelemente gibt es nicht. Wunderbar kann man per Grafik (Imagemap) eine Titelleiste samt DHTML-Kontrollbuttons fälschen.

                      Mathias

                    3. Orlando hatte das Problem mit der Adressleiste/Locationbar angesprochen - für meinen Opera 6.03 müsste man wohl auch scrollbars explizit auf 1 setzen, denn die fehlen bei mir... vielleicht wurde es schon angemerkt und ich hab's nur übersehen.

                      Jupp, habe das scrollbars=1 noch eingefuegt.
                      Ich habe extra mein vergammeltes Win98 hochgefahren, um mal mit dem IE5 rumzutesten. Naja, der hat sich so zickig angestellt, als ich versucht habe, mit ihm JavaScript zu betreiben, dass er jetzt einfach nicht gesondert beruecksichtigt wird. (Wie koennen manche nur mit dem Ding irgendwas entwickeln?)

                      Aber ein weiteres Problem, was mir eingefallen ist, ist dass der Handler gar nicht prueft, welche Maustaste gedrueckt wurde und in dem ein oder anderen Browser vermutlich auch bei der rechten Taste sein Ding durchzieht.

                      Das trifft zumindest fuer Opera und Mozilla nicht zu. Die kuemmern sich um den onclick-Event nur, wenn es um die linke Maustaste geht. IE... naja, nachdem er einfach gar kein JS mehr ausgefuehrt hat, hab ich's nicht mehr ausprobiert.

                      Ich lass das Script jetzt erstmal so. Meine Browserbeobachtungen kann man unter http://selfworld.calocybe.dyndns.org/ftmp/_blank-notes.txt begutachten. Wenn jemand weitere Testergebnisse hat, kann er die mir mailen.

                      So long

                      --
                      Heavy Metal macht aggressiv!
                      Counter-Strike dient doch nur zum runterkommen!

                  2. Ach dazu noch:

                    Obwohl ich dieses benutzergewählte "Alle externen Links als Popups öffnen" mag, das habe ich schon einmal auf *nachdenk* bloghaus.de gesehen.

                    Die setzen dort einfach das Target aller Link-Objekte auf _blank oder _self. Damit haben sie zwar die Huddelei mit dem Simulieren eines _blank-Fensters mit window.open() nicht, aber nach meiner Auffassung duerfte ein UA, der Strict wirklich strikt interpretiert, gar nicht wissen, was er von sowas halten soll. Oder auch: Wenn ich jetzt einen Browser schreibe, der nichts anderes als HTML 4 Strict versteht, dann versteht der auch dann noch nichts anderes, wenn der Seitenautor sein Dokument zwar als Strict kennzeichnet, aber trotzdem munter target="blank" verwendet.

                    So long

                    --
                    Life is complex. It has real and imaginary parts.

    2. Moin moin!

      In diese Richtung hatte ich zwar bereits gedacht, war aber nicht so weit gekommen wie du. Das hängt _auch_ damit zusammen, daß ich (und gewiß viele andere) das rel-Attribut bisher nahezu ausschließlich in Zusammenhang mit <link> kennengelernt habe

      Ich ja eigentlich auch. Ich hab das hier auch nur so verwendet, wie ich es verstanden habe, in der Hoffnung, dass das mit dem uebereinstimmt, was sich das W3C dabei gedacht hat. Aber falls nicht, ist der Code ja zum Glueck leicht auf andere Attribute zu adaptieren.

      auch richtig, nur ist die Kombination beider Bedingungen bei deiner (übrigens ganz eleganten) Lösung die Kombination einander ausschließender Bedingungen. "nicht-JavaScript-begabte Browser" öffnen den Verweis zwar  -  aber nicht in einem "neuen" Fesnter. Habs gegengprüft mit Opera und IE 6

      Aeh... ja, das ist schon klar. Mit "Einschraenkung" war gemeint, dass es nicht darin resultieren sollte, wie man es von vielen Seiten her kennt, dass z.B. die Navigation nur noch mit JS zugaenglich ist. Der JS-unfaehige Browser verpasst hier nichts ausser dem Wunsch des Webmasters, immer neue Fenster zu oeffnen. Das duerfte dem Besucher, der absichtlich JS abstellt, aber in den meisten Faellen sogar recht sein, behaupte ich mal. Lediglich wenn das Feature wie angedeutet ueber eine Checkbox an- und ausschaltbar gemacht wird, wuerde sich der JS-lose Besucher vielleicht etwas wundern. Deshalb sollte man eine solche Checkbox immer mit JS dynamisch erzeugen, und auch nur, wenn sicher ist, dass der Test auf (window.document.getElementsByTagName && String.prototype.split && window.open) dann bestanden wird. Das heisst auch, man sollte nicht einfach ein ausgeblendetes DIV aktivieren, denn wenn der Browser kein CSS kann, ist das DIV nicht ausgeblendet und der Besucher erhaelt eine funktionslose Checkbox mit sinnbefreitem Text - keine schoene Sache. Also Checkbox wirklich *dynamisch* erzeugen.

      Orlando:

      Opera 6 öffnet ein neues Fenster, allerdings ohne Adressleiste.

      Verdammt, war ja klar, das irgendein Browser wieder querschiesst. Dabei kann man dem noch nicht mal einen Vorwurf machen, denn wie window.open funktionert, ist glaube ich nicht standardisiert. Werd ich ihn mal wieder installieren und ein bisschen mit dem Optionenstring rumspielen, vielleicht finde ich die richtige Kombination raus. Falls nicht, kann ich zumindest fuer meine Zwecke (ich wuerde sowas auf jeden Fall nur als Option anbieten) aber auch damit leben.

      So long

      --
      Discovering the usefulness of the "command.com" shell on Windows 9x is left as an exercise to the reader :)
           -- from Perl's README.win32 file