Link Spy
Neulich im Abakus-Forum ging es darum, ob man herausfinden kann, ob der User einen Google Account hat. Mal abgesehen davon, dass ich immer noch nicht weiss, was ein Google Account ist, ist die Fragestellung nicht uninteressant.
In dem benannten Thread war das Ziel, dass der Webmaster nur einer bestimmten Gruppe von Usern zusätzliche Informationen anbieten möchte. Alle User, die nicht zu der Gruppe gehören, bekommen diese zusätzlichen Informationen nicht zu sehen. Bei der bestimmten Zielgruppe sollte es sich um User handeln, die einen Google Account !? besitzen.
Wenn man nun davon ausgeht, dass es keinen “legalen” Weg gibt man die History und die Cookies des Users nicht auslesen kann und darf, bleiben eigentlich nicht mehr viel Möglichkeiten um das Ziel zu erreichen. Eigentlich gibt es dann keine Möglichkeiten mehr. Zumindest keine offensichtlichen.
Aber dröseln wir das mal kurz auf, und schauen mal, ob es nicht doch - vielleicht mit einem Umweg - doch geht.
Ein Goggle Account !? Höchstwahrscheinlich ein geschlossener Mitgliederbereich, den man nur mit gültigen Logidaten betreten kann. Das heisst im Umkehrschluss jeder, der keine Logindaten hat, wird diesen Bereich nie zu Gesicht bekommen und wird auch nie die Seiten hinter dem Login erreichen. Somit wird er auch mit 99.999%iger Wahrscheinlichkeit Seiten, die sich hinter dem Login befinden nicht kennen und schon gar nicht aufrufen oder besucht haben. Soweit so gut!
Wer Webseiten erstellt oder erstellt hat kennt es ziemlich sicher… Wer HTML Seiten nur vom Internet surfen her kennt, hat es vielleicht schon einmal bemerkt. Auf den meisten Seiten ist es üblich, dass ein Link unterstrichen ist. Meistens ist er auch farblich hervorgehoben. Wenn man mit der Maus über den Link fährt, kann es auch sein, dass der Link seine Farbe verändert oder wenn er vorher nicht unterstrichen war, unter der Maus aber auf einmal unterstrichen dargestellt wird. Das ist der sogenannte “hover” Effekt. Spätestens jetzt weiss doch jeder was gemeint ist
Okay. Das ist jetzt noch nicht die Lösung des Problems. Es dient einfach nur zur Erklärung und zum besseren Verständnis der weiteren Schritte.
Gerade haben wir den Hover Effekt besprochen. Es gibt noch einen anderen Effekt, der zwar sehr unscheinbar ist, aber eben auch zu den Standards gehört. Das ist der visited-Link. Auch hier ein kleines Beispiel. Dafür führt man eine Suche bei Google durch. Am besten startet man eine Suche, bei der sicher eine Seite auftaucht, die man schon einmal besucht hat. Um es einfacher zu machen, besuche einfach die Heise Startseite. Und anschliessend suchst Du bei Google nach Heise. In den Suchergebnissen wird nun wohl auch die Seite dabei sein, die Du gerade besucht hast. Das würde dann bedeuten, dass nahezu alle Links in einem navyblau angezeigt werden und zumindest der Link auf Heise, den du gerade besucht hast in einem Violett dargestellt wird. Das heisst, dass Dein Browser über HTML-Code und CSS visualisiert, dass Du diese Seite schon einmal besucht hast. Und das ist dann der “visited” Effekt.
Das HTML und das CSS kommt ja aber nicht vom Browser
sondern das hat Google so festgelegt. Also Google hat doch irgendwie die Möglichkeit zu erkennen, ob Du einen Link schon einmal besucht hast oder nicht. Aber keine Angst nicht nur Google kann das. Das können alle Webmaster mit Ihren Webseiten.
Werden wir jetzt aber ein bisschen konkreter. Wir wissen nun, dass man die Farbe für vom User schoneinmal besuchte Seiten farblich definieren kann. Wir wissen auch, dass in einem geschlossenen Memberbereich, hinter einem Login, Links stecken, die nur User besucht haben können, die auch einen Login besitzen. Nehmen wir hier mal das Adsense Konto. Da ich selbst eines habe, kann ich ja schauen, was da für Links sind und mir einen raussuchen. Und der einfachheithalber nehme ich den Link der Seite, die unmittelbar nach dem erfolgreichen Login angezeigt wird. Ruft man diese Seite ohne Login auf, wird man auf die Loginmaske weiter geleitet. Damit jetzt nicht jeder auf den Link hier klickt, wenn ich den hier reinschreibe, nenne ich den mal einfach nur Overview-Link. Overview-Link, ist also der Link, der bei einem User mit Adsense Konto farblich anderst dargestellt wird. Bei einem user ohne Adsense Konto hat er wahrscheinlich die gleiche Farbe wie alle anderen Links.
Fehlt uns jetzt noch irgendwas, wie wir das für unser Ziel anwenden können. Fürs erste stellen wir eine Seite zusammen, auf der wir unter anderem auch den Overview-Link einfügen. Zusätzlich vergeben wir für den visited Effekt eine feste Textfarbe. Und dann kommt der Punkt, an dem wir mit Javascript das Tun, was wir eigentlich wollen. Wir überprüfen per Javascript jeden Link der Seite und vergleichen dessen Farbe mit den von uns definierten Farben. Wann immer die ermittelte Farbe mit der von uns für visited Links definierte Farbe übereinstimmt, wissen wir: Der User hat diesen Link schon einmal besucht. Und wenn unter diesen besuchten Links auch unser Overview-Link dabei ist, dann hat der User mit nahezu 100%iger Wahrscheinlichkeit auch einen Adsense Account. Wir könnten natürlich das ganze auf den einen interessanten Link beschränken. Aber für einen Test ist es so einfach interessanter.
Alles soweit verstanden? Okay! Dann noch einen Schritt tiefer. Obwohl ja das was jetzt kommt nur noch scripten ist.
Beim Bau der Testseite musste ich wieder einmal feststellen, dass die ganzen verschiedenen Browser wohl unterschiedlichen Standards
folgen. Die Konsequenz war, dass das was ich kurz im firefox getestet habe, im Internet Explorer nicht mehr funktioniert hat. Deshalb hier eine kurze Erklärung der angewandten Funktion und einer einfachen Browserweiche. Damit hat es bei mir auf einem FF2., IE6, IE7, Opera9 und Safari 3 funktioniert.
Normalerweise würde man ja denken, dass man mit (element).style.color auf die Schriftfarbe zugreifen kann. Das ist auch nicht ganz falsch. Es hat aber lediglich den Zweck, um die Schriftfarbe, genau für das Element zu definieren bzw. auszulesen. Oder anders ausgedrückt, man beeinflusst damit die CSS Eigenschaft des Elements. Und das muss nicht zwangsläufig das sein, was auch tatsächlich angezeigt wird. Dafür gibt es andere Funktionen. Und während (element).style.color noch nahezu in jedem Browser gleich behandelt wird, haben wir es mit der benötigten Funktion schon nicht mehr so einfach.
Beim IE wäre die Funktion, die wir benötigen currentStyle und im FF ist es die Funktion getComputedStyle. Als Browserweiche reicht mir in diesem Fall ein einfaches document.all. Und das meiste ist dann auch schon erledigt. Auf weitere Details der Funktionen möchte ich auch gar nicht eingehen. Denn ich kann die Funktionen sicher nicht besser erklären, als z.B. SelfHTML.
Für alle, die jetzt immer noch nicht wissen, wie es funktioniert bzw. funktionieren soll, und diejenigen, die lieber einen Quellcode anschauen anstatt seitenweise Manuals zu lesene, für die habe ich hier nun das funktionierende Beispielskript von Linkspy.
Kommentare und Lobeshymnen sind herzlichst willkommen. Kritiken natürlich auch. Und wer noch Erweiterungen vorschlagen möchte … Nur her damit.
Was ich jetzt noch aussen vor gelassen habe, ist dass es auch eine Variante ohne Javascript gibt. Die genaue Erklärung behalte ich mir aber für ein weiteres HowTo vor

Ja, muss sagen das du da echt eine feine Lösung gefunden hast =). Respekt. Jedoch würde ich nicht behaupten (auch wenns eigentlich nix mit dem Script ansich zutun hat) das Leute mit einem Google automatisch ein AdSense Konto haben. Google Konto und AdSense Konto sind zwei verschiedene Dinge. Denn es gibt ja auch noch Google Analytics, Google Maps API usw. und für diese Dinge brauch man auch ein Google Konto. Aber tut ja eigentlich nix zur Sache.
Also wie gesagt, Respekt für deinen Lösungsweg. Werde das Script bzw. die Lösung bestimmt noch mal verwenden können.
Gruß Sascha