Formatierung von visited Links bei Javascript-gesteuerten Links
Bambi
- html
0 Jaroslav Jablonski0 Bambi
0 ChrisB
Hallo zusammen
Ich hab bei meiner Suche nach einer Lösung nun oft gelesen, dass es dieses Problem gibt, aber leider keine Lösung gefunden...
Also, ich möchte besuchte Links via CSS speziell formatieren:
a:visited {
color: #FFBB19;
text-decoration: underline;
background: url(../images/icon_visitedlink.png) no-repeat left;
padding-left: 13px;
}
Das klappt auch sehr gut, solange meine Links etwa so aussehen:
<a href="index.php?status=15&id=<?php echo $id; ?>">Link-Text</a>
Aber da der Link bei aktiviertem Javascript ein modales Fenster öffnen soll, müssen die Links so aussehen:
<a href="index.php?status=15&id=<?php echo $id; ?>" onclick="openModalWindow (<?php echo $id; ?>);return false;">Link-Text</a>
Leider klappt das dann nicht mit der Formatierung der visited Links.
Irgendwie ist mir das auch klar, dass es nicht klappen kann, weil durch das return false die URL im href nicht beachtet wird. Aber trotzdem... das muss es doch eine Lösung geben!? *amkopfkratz*
Kennt jemand eine Lösung? Oder zumindest einen Workaround? Wäre sehr dankbar dafür, denn irgendwie muss ich das zum Laufen bringen...
Danke für die Hilfe! Und einen schönen Tag noch
Bambi
Kennt jemand eine Lösung? Oder zumindest einen Workaround? Wäre sehr dankbar dafür, denn irgendwie muss ich das zum Laufen bringen...
Weise doch einfach den Links die Formatierungen für a:visited dynamisch zu, also so etwa:
<a href="foo.php" onclick="openModalWindow(...); changeStyle(this); return false;">Klick</a>
und dann bastelste dir noch eine JS-Function:
function changeStyle(o) {
with (o.style) {
/* CSS-Formatierungen */
}
}
JJ
Hallo JJ
Danke für Deine Antwort.
Aber, wenn ich das so mache, dann werden diese Links bei einem späteren Aufruf dieser Seite ja nicht mehr als besuchte Links erkannt, da der Browser sie nicht seiner History hinzugefügt hat... Dann müsste ich in der Datenbank speichern, welcher User welche Links bereits angeklickt hat... Das kann's doch irgendwie nicht sein...?
Oder seh ich das jetzt falsch?
Ich bin total offen für weitere Vorschläge. :-)
LG Bambi
Aber, wenn ich das so mache, dann werden diese Links bei einem späteren Aufruf dieser Seite ja nicht mehr als besuchte Links erkannt, da der Browser sie nicht seiner History hinzugefügt hat.
Noch ne schmutzige Idee, laß das return false mal weg und manipuliere das href-Attribut, so daß der Link zwar ausgeführt wird, aber folgenlos bleibt. Bspw.:
<a id="a1" href="..." onclick="...; changeAttr(this)">Klick</a>
function changeAttr(o) {
o.href = '#' + o.id;
}
Hallo JJ
Du hast interessante schmutzige Ideen auf Lager... *lächel*
Wenn ich das so mache, dann wird der Link nach dem Anklicken als visited Link angezeigt (das ist ja schon mal ein Schritt weiter), aber erstens stimmt der href-Link danach natürlich nicht mehr mit dem originalen Link überein (was ja aber nicht soo schlimm ist, es wird ja wohl niemand mitten im Surfen das Javascript ausschalten..?), und zweitens erscheint der Link wieder im originalen (nicht visited) Zustand, wenn ich die Seite neu lade.
Wenn ich jetzt keinen Gedankenfehler mache, ist das ja eigentlich auch logisch, weil die beiden Links nicht mehr überein stimmen...
Eigentlich bräuchte ich also eine schmutzige Idee dafür, wie ich den korrekten Link zwar im href-Attribut stehen lassen kann, der aber beim Aufruf aber nur in die Browser-History aufgenommen wird, aber nicht ausgeführt wird. ???
Man man man...
LG Bambi
Hi,
<a href="index.php?status=15&id=<?php echo $id; ?>">Link-Text</a>
Aber da der Link bei aktiviertem Javascript ein modales Fenster öffnen soll, müssen die Links so aussehen:
<a href="index.php?status=15&id=<?php echo $id; ?>" onclick="openModalWindow (<?php echo $id; ?>);return false;">Link-Text</a>
Und welchen URL laesst du im Modal-Window anzeigen?
MfG ChrisB
Hallo ChrisB
Vielen Dank für die Antwort!
Und welchen URL laesst du im Modal-Window anzeigen?
Ich weiss leider nicht recht, was Du meinst... Das modale Fenster an sich hat ja keine URL...?
Die Seite, auf denen die Links stehen, die zu dem modalen Fenster führen sollen, hat die folgende URL:
http://www.foo.com/index.php?status=20 (oder status = 21 oder 22)
Diese Seite bleibt dann geladen und das DIV des modalen Fensters wird darüber angezeigt.
Beantwortet das Deine Frage?
Vielen Dank!
LG Bambi
Hi,
Und welchen URL laesst du im Modal-Window anzeigen?
Ich weiss leider nicht recht, was Du meinst... Das modale Fenster an sich hat ja keine URL...?
Ich nahm an, du redetest wirklich von modalen Fenstern -
Diese Seite bleibt dann geladen und das DIV des modalen Fensters wird darüber angezeigt.
Nun, dann gibt's also wirklich keinen URL, der bei deren Anzeige aufgerufen und damit einen History-Eintrag erzeugen wuerde.
Zurueck zur Aufgabenstellung:
Dann blieben dir noch Cookies, um darueber "dauerhaft" zu speichern, welche dieser "Links" bereits besucht wurden, um darueber auch beim naechsten Besuch die (pseudo-)visited-Formatierung ueber dynamische Vergabe einer Klasse wieder herzustellen.
Oder aber, du muesstest die eigentlichen Links beim Anzeigen der Divs auch wirklich aufrufen lassen - bspw. in einem kleinen versteckten Iframe. Aber das waere mir irgendwie zu pervers ...
Oder, wenn die Divs den HTML-Code enthalten, der auch in den wirklich verlinkten Dokumenten enthalten ist, dann koennte man diesen per AJAX nachladen, und nur das passende in die Divs einsetzen - in der Hoffnung, dass auch der Dokumentabruf per AJAX vom Browser derart "gemerkt" wird, dass er darauf zeigende Links als :visited ansieht. (Lediglich Hoffnung, da ich das noch nicht ausprobiert habe.)
MfG ChrisB
Hallo ChrisB
Ich nahm an, du redetest wirklich von modalen Fenstern -
Öhm ja, ich denke schon. ?? Zumindest habe ich das gemacht, was in meinem Ajax-Buch modales Fenster genannt wird... :-)
- aber du meinst wohl nur Div-Elemente, die du ueber der Seite platzierst.
... und die über Ajax mit Inhalt gefüllt werden - abhängig von den im Link übergebenen Parametern. Also doch ein "richtiges" modales Fenster?
Vielen Dank für die drei Vorschläge! Ich werde mir morgen mal Gedanken machen, welche Variante wohl am meisten Sinn macht.
Oder, wenn die Divs den HTML-Code enthalten, der auch in den wirklich verlinkten Dokumenten enthalten ist, dann koennte man diesen per AJAX nachladen, und nur das passende in die Divs einsetzen - in der Hoffnung, dass auch der Dokumentabruf per AJAX vom Browser derart "gemerkt" wird, dass er darauf zeigende Links als :visited ansieht. (Lediglich Hoffnung, da ich das noch nicht ausprobiert habe.)
Hm... ich kann im Moment nicht wirklich nachvollziehen, was Du mit "und nur das passende in die Divs einsetzen" meinst. Vielleicht blicke da morgen durch.
Nochmals vielen Dank für Deine Hilfe!
LG Bambi
Hi,
Ich nahm an, du redetest wirklich von modalen Fenstern -
Öhm ja, ich denke schon. ?? Zumindest habe ich das gemacht, was in meinem Ajax-Buch modales Fenster genannt wird... :-)
Unter einem modalen Fenster/Dialog versteht man eigentlich ein wirklich eigenstaendiges Fenster-Objekt, wie ein Popup, welches aber einige Zusatzeigenschaften mit sich bringt (immer im Vordergrund bspw.)
Hm... ich kann im Moment nicht wirklich nachvollziehen, was Du mit "und nur das passende in die Divs einsetzen" meinst. Vielleicht blicke da morgen durch.
Die "richtigen" Links duerften wohl auf vollstaendige HTML-Dokumente gehen.
Wenn du diese Ressourcen abrufst - um damit den "nativen" :visited-Effekt zu erhalten - kannst du die aber nicht komplett in ein Div einbauen, weil in einem solchen html, head, body nix verloren haben. Also waere nur der jeweilige Inhalt des Dokumentes auszuschneiden, und im Div anzuzeigen.
MfG ChrisB