Es ist eine Krux: man speichert sich daheim eine Internet-Adresse in den
Lesezeichen des Browsers und benötigt gerade diese später im Büro. Die
Lösung des Problems ist, die Internet-Favoriten zentral irgendwo im Internet
selbst zu speichern. Dienste wie del.icio.us
haben vorgemacht wie es geht. Entstanden sind daraus richtige
Link-Communities, in denen man seine Lesezeichen mit anderen teilen kann,
etc. pp.
Aber warum muss man erst irgendwo Mitglied werden, wenn man ein eigenes
Web besitzt, mit dem man mit ein wenig ASP- oder PHP-Code eine eigene
Sammlung bewerkstelligen kann. Meist ist es doch einfach so, dass man gerade
keine Zeit hat sich eingehender mit einer Seite zu beschäftigen und sich die
Adresse schlicht für später aufheben möchte. Zudem bleibt immer noch die Frage, wie man
Internet-Adressen ähnlich simpel wie im heimischen Browser speichern kann:
mit einem Mausklick.
Am Anfang einer Lösung Marke Eigenbau steht erst einmal einen
entsprechendes Web-Space mit Datenbankanbindung. In diesem Beispiel ist dies
ein Microsoft Internet Information Server für die ASP und eine
Microsoft SQL-Server-Datenbank. Genauso gut eignet sich jedoch auch ein Apache-Server
mit PHP und MySQL. In diesem Fall muss nur der im weiteren
Verlauf ndes Artikels beschriebene verarbeitende Code nach PHP umgesetzt
werden.
Datenbank
Starten wir mit dem Entwurf der relativ schlichten Datenbanktabelle:
| Tabellenfeld |
Beschreibung |
| FAV_ID |
Datensatzschlüssel (Autowert) |
| FAV_Title |
Titel der Seite |
| FAV_Address |
URL der Seite |
| FAV_AddDate |
Erstellungsdatum des Datensatzes |
Verarbeitung der Internet-Adressen
Um die gewünschte Adresse nun in die Tabelle zu bekommen, eignen sich
URL-Parameter am besten. Dazu werden der verarbeitenden Seite (hier: ASP) in der URL zwei Parameter
mitgegeben, z.B.:
http://www.meinweb.de/bookmark.asp?title=Spiegel Online?
address=http://www.spiegel.de
Im Code der ASP-Seite bookmark.asp
müssen nun zunächst die beiden Parameter ausgelesen werden, um sie dann per
ADO in die Tabelle zu schreiben:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<% @ LANGUAGE="VBScript" %>
<%
'*** Parameter auslesen
strTitle = Request.QueryString("title")
strAddress = Request.QueryString("address")
'*** Datenbankverbindung öffnen
Set objConn = Server.CreateObject("ADODB.Connection")
'*** Eintrag anlegen
strSQL = "INSERT INTO tblFavoriten ( FAV_Title, FAV_Address, FAV_AddDate ) " & _
"SELECT '" & strTitle & "' AS favTitle, " & _
"'" & strAddress & "' AS favAddress, " & _
"'" & Date() & "' AS favAddDate"
objConn.Execute strSQL, , adExecuteNoRecords
'*** Datenbankverbindung schließen
objConn.close
set objConn = nothing
'*** Anzeigen der Ursprungsseite
response.redirect(strAddress)
%>
</head>
<body></body>
</html>
Mehr als den abgebildeten Code braucht es gar nicht, denn auf dieser
Seite soll nichts angezeigt werden, denn sie soll lediglich ja die
übergebenen Parameter verarbeiten. Im Anschluss an den Eintrag in die
Tabelle wird die Lesezeichen-Seite wieder aufgerufen.
Die "Ein-Klick"-Lösung
Entscheidend bei dieser Lösung ist nun wie die o.g. ASP-Seite aufgerufen
wird. Anstatt jedesmal mühsam die komplette Adresse der Seite inkl.
Parameter einzutippen, greifen wir auf Javascript zurück. Wie in einem
anderen zerbit.de-Artikel beschrieben (siehe "verwandte Artikel"), kann man
kleine Javascripte als Lesezeichen im Browser speichern, sog.
Bookmarklets oder Favlets. Diese Technik machen wir uns hier
zunutze. Die "Adresse" unseres Bookmarklets lautet:
javascript:location.href='http://www.meinweb.de/bookmark.asp?
title='+escape(document.title)+'&address='+escape(location.href);
Der Übersichtlichkeit halber sind die beiden Scripte jeweils am Ende
einer Anweisung (Semikolon) und am Fragezeichen umgebrochen. Im Bookmarklet jedoch muss alles in
einer Zeile stehen.
Der Javascript-Einzeiler im einzelnen: Mit dem Setzen von location.href wird der Browser veranlasst unsere ASP-Seite inkl.
Parameter anzusurfen. Die Parameter werden mit der Funktion escape
in ASCII-Zeichen umgewandelt, um sicherzustellen, dass z.B. Umlaute richtig
verarbeitet werden. Als Lesenzeichentitel dient hier der Titel des aktuell im Browser
angezeigten Dokuments (document.title). Die Adresse der zu
speichernden Seite wird mit dem aktuellen Inhalt von location.href
festgelegt.
Optimierung des Bookmarklets
Nun haben viele Web-Seiten keine besonders sprechenden Dokumententitel.
Oftmals steht dort auf allen Seiten lediglich der Name der Seite, "Neue Seite 1"
oder schlimmstenfalls gar nichts, was unsere Lesezeichenbeschreibung recht
sinnlos macht bzw. das Script mit einer Fehlermeldung abbrechen lässt. Aus diesem Grunde erweitern wir das Javascript so, dass ein
auf der aktuell angezeigten Seite markierter Text, z.B.
eine Überschrift, als Titel des Lesezeichens übernommen wird.
Um eine Markierung per Javascript zu ermitteln gibt es je nach Browser unterschiedliche Umsetzungen. Firefox und
Mozilla z.B. verwenden die Funktion document.getSelection(), der
Internet Explorer widerum benutzt die Eigenschaft document.selection.createRange().text. Der neue Opera 8.5 hingegen kommt mit
beiden Varianten klar; die alte Opera-Version 8.0 hingegen nur mit document.selection(). Ein sehr gute Erläuterung des Themas gibts es unter
http://www.quirksmode.org/js/selected.html (siehe Abbildung).
Im Folgenden ist der Code für die Varianten
Firefox und Internet Explorer dargestellt, ja nachdem welchen Browser Sie
einsetzen, können sie das ein oder andere Script verwenden.
Firefox/Mozilla
javascript:
x=document.title;
y=document.getSelection();
if(y){t=y}else{t=x};
location.href='http://www.meinweb.de/bookmark.asp?
title='+escape(t)+'&address='+escape(location.href);
Internet Explorer
javascript:
x=document.title;
y=document.selection.createRange().text;
if(y){t=y}else{t=x};
location.href='http://www.meinweb.de/bookmark.asp?
title='+escape(t)+'&address='+escape(location.href);
Der Übersichtlichkeit halber, sind die Scripte wie oben umgebrochen. Im Bookmarklet jedoch muss
wiederum alles in
einer Zeile stehen.
Für Menschen, die es gerne etwas bequemer haben, wollen wir nun noch eine
Variante erstellen, die Browser-unabhängig ist. Dazu muss eine
verschachtelte Entweder/Oder-Abfrage in verkürzter Schreibweise (mit ? und
:) in das Script eingebaut werden, die
ermittelt, mit was der gerade verwendete Browser denn zurecht kommt. Zusätzlich werden in einer weiteren Zeile mit der Methode replace()
aus dem markierten Text noch alle Sonderzeichen herausgefiltert, die sich
eventuell störend auswirken könnten. Um nicht Gefahr zu laufen zuviel Text
als Titel zu speichern, wird der Text zusätzlich noch auf 75 Zeichen gekürzt und mit drei Punkten kenntlich
gemacht, dass eigentlich mehr Text übernommen werden sollte:
javascript:
x=document.title;
y=''+(window.getSelection?window.getSelection():
document.getSelection?document.getSelection():
document.selection.createRange().text);
y=y.replace(/["!?;:.,]/g, "");
if(y){t=y}else{t=x};
if(t.length>75){t=t.substring(0,75)+'...'};
location.href='http://www.meinweb.de/bookmark.asp?
title='+escape(t)+'&address='+escape(location.href);
Eine weitere Variante ist, dass jedes Mal eine Eingabemaske erscheint, in dem man den Titel des Lesezeichens vor
dem Speichern noch einmal überarbeiten kann, wenn man denn möchte:
javascript:
x=document.title;
y=''+(window.getSelection?window.getSelection():
document.getSelection?document.getSelection():
document.selection.createRange().text);
y=y.replace(/["!?;:.,]/g, "");
if(y){s=y}else{s=x};
r=prompt('Lesezeichentitel:', s);
if(r){t=r}else{t=s};
if(t.length>75){t=t.substring(0,75)+'...'};
location.href='http://www.meinweb.de/bookmark.asp?
title='+escape(t)+'&address='+escape(location.href);
Fazit
Speichert man sich nun das Bookmarklet in den Favoriten und nennt es z.B.
"Aktuelle Seite zu Web-Favoriten" hinzufügen, kann man eine interessante
Seite mit einem Klick in die Datenbanktabelle übernehmen. Bleibt nur noch
die Aufbereitung der Daten auf einer entsprechenden ASP-Seite und man hat en
effektives System zur Speicherung von Lesenzeichen im Internet - ohne
Mitgliedszwang.