Javascript

Verwaltung der Favoriten im eigenen Web

Lesezeichen über ein Bookmarklet im Internet speichern

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.

kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Schlagworte

3 Kommentare bislang...

  • Hm, netter aber sehr kleiner Ansatz. Auf diese Seite bin ich gestoßen, weil ich nach einem ähnlichen aber umfangreicheren Tool suche. Wichtig wären mir hierbei Kategorien, in welche man die Links einordnen kann (weil auf Streifzügen durchs Netz findet man so viel, das schon nach wenigen Monaten der Überblick futsch ist).
    Die eigenen Kategorien kann ich noch selber programmieren, wo mein Wissen allerdings aussetzt ist mein Wunsch nach Tags zu allen Links. Das würde die spätere Suche erheblich vereinfachen! Ich habe noch nie ein System entwurfen, wo Datensätze mit zusätlichen Tags abgespeichert und verknüpft wurden. Kann man diese Anforderung in dein System mit übernehmen? Bzw. gibt es sowas in der Art schon (speziell zum Bookmarks/Favoriten sammeln)?
    Gruß Basty
    3
    Basty : Montag, 25. September 2006 17:59
  • @Wolfgang: Vielen Dank für den Hinweis...! Im SQL-String steht nun Date() anstatt der strDate-Variablen und die falsche Script-Ende-Anweisung habe ich auch korrigiert.

    Den Einwand bezüglich der Prompt-Variante und der Darstellung als Link verstehe ich allerdings nicht recht. Alle Varianten sind dafür da, in den Favoriten gespeichert zu werden. Die Prompt-Variante bietet zudem lediglich eine Eingabemaske in der man den Titel des zu speichernden Links verändern kann. Alle Varianten sind gültiges Javascript und man kann sie ohne weiteres im HREF-Attribut eines Links unterbringen.
    2
    Kristof : Donnerstag, 15. Juni 2006 19:22
  • Na ja ganz so wird es nicht funktionieren.
    Im ersten Script ist die Variable strDate nicht definiert also wird also Datum 1.1.1900 in die Tabelle geschreiben. Möchte man da wirkliche Datum drinnen haben also mit strDate = date() das Datum reinschreiben.
    Weiters ist die ASP Ende Markierung ein Stück zu weit oben gehört NACH der response.redirect.
    Die Variante mit der Eingabemaske funkt zwar prinzipiell aber wie bitte schon stellt man die als Link dar.????
    Sonst aber ein ganz guter Ansatz
    1
    Wolfgang : Donnerstag, 15. Juni 2006 17:46

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 47

  • Datum: 26.10.2005
    Kategorie: Javascript
    Zugriffe: 1.933
    Kommentare: 3
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei