Ich arbeite gerade an einem (dieser bereits weit verbreiteten) »Social Bookmarks«-Dingens und habe es soweit geschafft (JavaScript ist NICHT toll :/), dass es konsole-zumüllen-frei läuft.
Nun ja, das Ding ist ein Mix aus JavaScript und Perl, welches zum Teil mißbraucht wird, JavaScript-Ressourcen auszuliefern. Und ja, innerHTML ist leider das A und O, denn auf ellenlange appendChild-Orgien hatte ich keine Lust. So liest z.B. das eine Perl-Skript eine Datei auf meinem Server, führt die notwendigen Ersetzungen oder Anpassungen, und liefert das Ganze als innerHTML eines bestimmten Elements zurück.
Funktioniert auf Opera 9+, neueren Webkits und Geckos, und allen IE ab 6 (nur dass ich für letztere, bzw. für IE 6 und 7, noch am CSS feilen muss) -und wahrscheinlich auf allen Browsern, die getElement(s)By... verstehen.
Kurz und knapp: Die Interessenten binden auf Ihren Webseiten ein DIV ein, dem ein <script ...>-Tag folgt. Das somit eingebundene JavaScript befindet sich auf meinem Server (src="http://example.com/js/foo.js") und »holt sich« die weiteren, benötigten Datei-, CSS- und JavaScript-Ressourcen (läßt sich prima mit Firebug beobachten). Für den Nutzer des Services also relativ einfach.
Beim CSS wird superspezifisch gearbeitet, damit evtl. CSS der Seiten, auf denen der Service eingebunden wird, ihre Gene nicht vererben können. Ferner soll die Service-CSS ebensowenig die Vorgaben des Autors beeinflussen dürfen. Brignt zwar ellenlange Zeilen ala: div#x ul#y li#z a#foo span.bar - aber sicher ist sicher.
So... und nun zur Perl-Frage. Allen Anschein nach besitzt 1und1 nicht die neueste MIME::Lite-Version, denn dieser Tipp mit »encdoe()« führte zu einem Error. Dann habe ich mir mit folgendem Code geholfen:
my $email = MIME::Lite->new( 'Return-Path' => $from,
From => $from,
To => $cgi->param('recipientmail'),
Subject => $subject,
Type => 'multipart/mixed',
Encoding => '7bit');
my $body = MIME::Lite->new( Type => 'multipart/alternative',
Encoding => '7bit');
$body->attach( Type => 'text/plain; charset=UTF-8',
Encoding => 'base64',
Data => $plain
);
$body->attach( Type => 'text/html; charset=UTF-8',
Encoding => 'base64',
Data => $html);
$email->attach($body);
$email->send()
~~~;
Da ich mit meinem Mail-Client nur HTML-Mails prüfen kann (die kommen dank diesem Code fehlerfrei und ohne Schei?-Encoding-Probleme an), hier die Frage: ist das für Empfänger, die nur text/plain akzeptierenm, auch OK? Gerne würde ich eine Testseite vorstellen, doch noch bin ich soweit. Vielleicht, vor allem Alexander(HH) als Verfechter von MIME::Lite, kann was dazu sagen?
Ach ja, zum Thema »JavaScript ist nicht toll«: das ist sicher nicht die Schuld von JavaScript... aber das aggressive Bilder-Caching von vor allem IEs und Opera habe mich an bild.onload mehrere Stunden zweifeln lassen...
MfG,
Patrick (noreg), als bald schlafengehender Schrat letztens bekannt