Calocybe: target="_blank" for HTML Strict pages

Beitrag lesen

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."