Kai Freikorps Kai Tracid Kai Winding

buy CD Albireon download music Apparat download albums After The Eulogy albums download 2 Preciious, Lee Aaron Arthur Cordewener A Beautiful Machine Absolum online tracks Audioholics Alio Die and Zeit A Beautiful Machine Absolum buy albums Animal Collective (feat. Vashti Bunyan) download music Artento Divini online music AZ-Rotator buy tracks Alfven, Hugo buy Arizona Dream A Beautiful Machine albums buy Alexi Delano buy albums Andy Moor Annie Haslam A Beautiful Machine Absolum download CD 2Pac - Makaveli and Dillinger Accept A Beautiful Machine Absolum online albums Agresion buy CD Apparat Amsterdam Klezmer Band A Beautiful Machine Absolum online CD Acid Rain buy Anugama and Sebastiano A Beautiful Machine buy music A Split Second albums download Apocalypse download Asrai A Beautiful Machine download mp3 2 Preciious, Lee Aaron online mp3 Adam Freeland online CD A-Ha buy tracks 4 Strings and Tina Cousins buy CD Artie Shaw online CD AZ download music Amauta and Rijchary buy music ASC feat Intex Systems buy tracks Arruga, Lombardo and Friends buy music Ashen Light download Aidan Baker vs. Cymbl A Beautiful Machine albums buy Angels and Airwaves download Astrid Williamson A Beautiful Machine Akwid and Jae-P A Beautiful Machine Absolum online CD Alejandro Sanz buy tracks Aly and Fila buy tracks Alex Sword and John Chevalier online mp3 Abazagorath albums download Arthur Alexander download albums Anchors for Arms download CD Anuradha Paudwal, Sanjeev Ab.. albums download Altiplano De Chile download tracks Acron online albums Auberon buy mp3 A New Age In Relaxation online mp3 Avail albums download Angelo Badalamenti download Alan Menken A Beautiful Machine buy tracks Arcane online tracks Alternative Control online Agatus A Beautiful Machine download CD Adham Shaikh download music 68 Beats download music Alan Sorrenti buy CD Arj Snoek download Aidan Baker A Beautiful Machine download CD Akira Takasaki buy music Anathema online mp3 Alla Zagaykevych online Altus and Silvercord A Beautiful Machine download mp3 Arnold Schoenberg and Anton Webern buy mp3 Alexander online Aes Dana A Beautiful Machine download mp3 5Ive's Continuum Research Project buy mp3 Alastair Galbraith buy albums A Javelin Reign buy music Arzu buy mp3 Ahmed Sahin download tracks Apache Indian download CD Alex Parsons and Tommy Four Seven Aalto A Beautiful Machine Absolum

Januar 2nd, 2008

Transparente Buttons im IE

Posted by frank in AJAX

Heute hatte ich wieder einmal ein Problem, was speziell den InternetExplorer betrifft. Ziel war es einen transparenten Button (INPUT Type=Submit) zu erzeugen, der sich über einen beliebigen Text legt. Hintergrund hierfür ist, dass der IE6 ja das Button-Problem hat und zusätzlich im JSF-Framework einfache Links nicht für die Navigation (Navigation-Rules) verwendet werden können. Die Idee dahinter ist daher einen SPAN-Tag mit dem gewünschten Inhalt zu haben und darüber ein transparentes INPUT-Feld zu legen.
In den Browsern Firefox, Safari und Opera funktioniert dies auf Anhieb problemlos. Hierzu musste einfach dem Span-Tag die Position relative verpasst werden und das innere Input-Feld wurde absolut positioniert (Breite / Höhe 100%).
Im IE gab es dann jedoch schon den ersten Fehler. Der Button war weg!
Da der Button als Value nichts hat und zusätzlich transparent ist und keinen Rand besitzt wurde dieser einfach gar nicht gerendert und die Größe ignoriert. Er war nicht anklickbar. Abhilfe schafft hier das Setzen eines Hintergrundbildes in Form eines transparenten GIF-Pixels.
Im IE6 gab es zusätzlich noch das Problem, dass dieser die geerbte Breite von 100% nicht vom Elternelement mit Position, als in unserem Fall das Span-Tag, bezog, sondern vom Body selbst. Damit war der Button natürlich viel zu Breit. Einen Hinweis hierzu habe ich auf http://www.satzansatz.de/cssd/onhavinglayout.html gefunden. Dort wird das Verhalten des IEs beim Rendern erläutert. Abhilfe schafft hier ein display:inline-block im Span-Tag.

Der fertige Code sieht dann wie folgt aus:

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8″ />
<title>Insert title here</title>
</head>
<body>
<form method=“get” action=“http://google.de/search?q=”>
<p><input type=“hidden” name=“q” value=“text” />
text davor
<span style=position: relative; display:inline-block><a href=“#”>link</a><input style=position: absolute; cursor:pointer; left: 0px; width:100%; top: 0px; height: 100%; background:transparent; background-image:url(trans.gif); border: 0px solid #0000ff ; margin: 0px; padding: 0px type=“submit” name=“button” value=“” /></span>
text danach
</p>
</form>
</body>
</html>

Dies kann nun als CommandLink-Code verwendet werden, ohne dass hierfür JavaScript auf der Client-Seite notwendig ist.

Juli 4th, 2007

Scrollleisten im Firefox auf dem Mac

Posted by frank in AJAX

Wieder einmal und wahrscheinlich auch nicht zum letzten Male bringt ein Browser einem zur Weißglut. Diesmal ist es (außnahmsweise) mal nicht der IE, sondern der Firefox. Dieser hat, auch in der aktuellsten Alpha (Firefox 3 Alpha 3), einen gravierenden Bug bei der Anzeige von Scrollleisten. Aber seht selbst:
Firefox Bug unter Mac
Der gelbe und der Blaue Layer sind eigentlich über den Layer mit dem Bild und sollten demzufolge auch die Scrollleisten überdecken. Das es eigentlich auch geht zeigt der Firefox 2 unter Windows:
Firefox unter Windows
Und auch ein anderer Browser, hier der Safari, kann es unter Mac wunderbar anzeigen:
Safari unter Mac
Für alle, die es selbst testen wollen bleibt noch die HTML-Variante.
Kann man nur hoffen, dass der Fehler bald behoben wird.

Juni 26th, 2007

JS: Auf Array prüfen

Posted by frank in AJAX

Gerade in komplexeren Anwendungen weiß man hin und wieder nicht welchen Typ eine bestimmte Variable hat und möchte daher dies prüfen. Ich hatte ja bereits in der Vergangenheit beschrieben, wie man zwischen Funktionen und Objekten unterscheidet.
Da sich Arrays jedoch auch als Objekte ausgeben hilft eine Unterscheidung zwischen einem Array und einem Objekt leider nicht. Abhilfe schafft hier jedoch eine Besonderheit bei “instanceof”:

var a = Array();
var b = new Object();
alert(a instanceof Array);
alert(b instanceof Array);
alert(a instanceof Object);
alert(b instanceof Object);

Als Ausgabe ist hier zu erwarten: true, false, true, true

Juni 22nd, 2007

Microsofts InternetExplorer und “Mitglied nicht gefunden”

Posted by frank in AJAX

Das der IE bei Fehlern im JavaScript dem Nutzer so “tatkräftig” zur Hand geht, ist ja allgemein bekannt. Interessant ist hierbei auch die Fehlermeldung “Mitglied nicht gefunden”.

Verändert man per JS den DOM-Baum, so kann man mit node.setAttributeNode neue Attribute hinzufügen. Ausgenommen hiervor scheint jedoch das Attribut “style” bei HTML-Elementen. Denn beim Setzen von diesen Attributen wird massiv vom IE gemeckert. Fehler: “Mitglied nicht gefunden”
Abhilfe schafft hierbei wohl nur der Weg über die Eigenschaft “style“, die das HTML-Objekt nach document.createElement bereits hat.

März 17th, 2006

Opera 8.52: XML-Verarbeitung

Posted by frank in AJAX

Bei der XML-Verarbeitung mit AJAX bringt der Opera 8.52 ein komisches Verhalten mit. Neben der fehlenden synchronen Abfrage interpretiert er die XML-Datei auch etwas eigensinnig. Mit der Eigenschaft “responseXML” des XMLHttpRequest-Objektes kann auf eine XML-Datei per DOM-Struktur zugegriffen werden. Der Opera liefert dann die Tagnamen von XHTML jedoch immer in Großbuchstaben aus und ignoriert dabei völlig die Schreibweise in der übertragenen Datei. Dies ist vor allem bei einem Textvergleich eine leicht zu übersehende Fehlerquelle, zumal in XML-Dateien die Tags sowieso alle klein geschrieben sein sollten.

März 13th, 2006

JavaScript: typeof vs. instanceof

Posted by frank in AJAX

Soeben habe ich noch etwas bemerkenswertes festgestellt. Laut JavaScript ist eine einfache Function automatisch ein Objekt.

Folgender Code soll es verdeutlichen:


function o() {
}

var t = new o();

alert((typeof o == "function") ? "true" : "false");
alert((typeof t == "function") ? "true" : "false");
alert((o instanceof Object) ? "true" : "false");
alert((t instanceof Object) ? "true" : "false");

Dieser Code gibt folgendes aus: true, false, true, true

Es sollte also nie eine function auf “Object” mit instanceof geprüft werden.

März 12th, 2006

JavaScript, Ereignisse und innere Variablen

Posted by frank in AJAX

Wenn man etwas aufwendigere Webseiten mit JavaScript verschönen will, kommt man vor allem bei den dynamisch erstellten Ereignissen schnell ins strudeln.
Dies möchte ich an einem kleinen Code-Beispiel zeigen:


function t() {
this.v = "123";
}

function some() {
var obj = document.getElementById("test");
var v = new t();
v.v = "124";
obj.onclick=function() { alert(v.v); }
var v = new t();
}

Was wird hier wohl ausgegeben? Genau, nicht wie vielleicht erwartet 124, sondern 123. Denn die Variable v wird durch new t() am Ende wieder überschrieben und das Ereignis bezieht sich dann auf diese lokale Variable.

Nun kann man dies zwar hier umgehen durch einen anderen Variablennamen, in einer Schleife stellt sich das Problem dann jedoch schon etwas gravierender dar.

Abhilfe schafft an dieser Stelle, dass an fast jedes Objekt in JavaScript dynamische Properties hinzugefügt werden kann.
Ändern wir als den Code wie folgt ab:


function t() {
this.v = "123";
}

function some() {
var obj = document.getElementById("test");
var v = new t();
v.v = "124";
obj.onclick_vars = v;
obj.onclick=function() { alert(this.onclick_vars.v); }
var v = new t();
}

Jetzt gibt der Code beim Klick auf das Element “test” den Wert 124 aus, denn es wurde vorher die Referenz auf v in obj.onclick_vars abgelegt, auf welche später zugegriffen wird.

Auf diese Art und Weise kann das Manko umgangen werden, dass man an Ereignisse keine zusätzlichen Variablen hängen kann. In meinen Augen ein klarer Design-Fehler, denn ein platz für ein Objekt wäre im Eventhandler sicherlich noch übrig gewesen.

März 1st, 2006

Konqueror sendet falsche Daten

Posted by frank in AJAX

Nutzt man beim Konqueror (Version 3.4.3) das XMLHttpRequest um per send einen String zu senden, so sendet der Konqueror den String zuzüglich eines 0-Zeichens. Dieses Zeichen wird häufig zur Terminierung von Zeichenketten verwendet, hat aber beim Senden wirklich nichts verloren. Folgender Code demonstriert das Phänomen, welches per Sniffer wie ethereal überwacht werden kann.

req = new XMLHttpRequest();
req.open("POST", "http://www.ziel.de/", false);
req.send("test");

Es wird hier der Text “test” sowie das 0-zeichen im POST-Stream gesendet.

März 1st, 2006

Opera und das XMLHttpRequest-Objekt

Posted by frank in AJAX

Opera unterstützt ja nun seit geraumer Zeit (glaube ab 8.0) auch das XMLHttpRequest-Objekt, welches für AJAX notwendig ist. Dies scheint jedoch nicht ganz dem von Mozilla zu entsprechen. Wenn man der Referenz für XMLHttpRequest folgt, so ist durch das Async-Flag im open-Befehl die Wahl zwischen synchroner und asynchroner Abfrage möglich. Der Opera bis Version 9.00 Build 3216 unterstützt die synchrone Übertragung nicht. Egal wie, es ist immer asynchron. Dies kann jedoch recht einfach nachgebildet werden:

req = new XMLHttpRequest();
req.open("GET", "http://ziel/", false);
req.send();
while (req.readyState <> 4) ;
Februar 23rd, 2006

Javascript Bug in Safari

Posted by frank in AJAX

Beim Testen von verschiedenen Eigenschaften habe ich gestern im Safari-Browser 2.0.3 einen interessanten Bug gefunden. Bei z.B. einem DIV-Layer werden die OnMouseOut-Ereignisse nicht korrekt erzeugt. Sobald der Layer oder ein anderes Objekt einen Text hat, wird beim überfahren dieses Ereignis immer wieder ausgeführt.
Hier ein Beispiel-Code:
(weiterlesen…)