Jest to blog poświęcony nowoczelnym technologiom ułatwiającym tworzenie aplikacji internetowych. Znajdziesz tutaj porady na temat CSS3, JavaScript, designu, web-usability, standardów W3C.
Cześć! Nazywam się Michał Środek. Z zawodu programista php, z zamiłowania gitarzysta oraz fanatyk GNU/Linuksa(openSUSE® w laptopie). W branży aplikacji internetowych od 9 lat. Prywatnie bez dzieci i kota.
Pracuję wciąż nad własnym elastycznym i wydajnym frameworkiem MVC, kilkoma portalami internetowymi oraz mniejszymi bibliotekami php. Czekam na wasze opinie, zgłoszenia błędów oraz pomysły na dalszy rozwój.
Ta część strony jest w trakcie budowy a moje prace tymczasowo niedostępne.
W przypadku pytań, ofert pracy oraz ciekawych pomysłów proszę się ze mną kontaktować. Możesz mnie znaleźć i wysłać PW na php.pl(SHiP), jamendo.com(michalsrodek), goldenLine.pl, facebook.com lub nk.pl
Różne przeglądarki w różny sposób zarządzają historią. Firefox domyślnie przechowuje ją przez 90 dni, Opera i IE około 20–30 a Chrome w nieskończoność. Czy twoja historia przeglądarki jest bezpieczna? Niestety nie do końca. Czy może ją podglądać twórca strony, na którą wchodzisz? W pewnym sensie tak. Dzisiaj przedstawię sposób w jaki sposób sprawdzić czy użytkownik odwiedzał jakąś stronę.
Nie da się(a przynajmniej nie w takiej postaci jaką dzisiaj pokażę) przeglądać całej historii. Jest jednak sposób aby wyciągnąć informację o tym czy użytkownik odwiedził konkretny adres www. Wszystko dlatego, że CSS posiada pseudoklasę :visited dzięki której można określij inne ostylowanie dla linków odwiedzonych. Przy użyciu JavaScript w łatwy sposób można sprawdzić, które linki mają inny styl i wysłać o nich informację na serwer.
Są dwie techniki, dzięki którym możemy wysłać informację na serwer. Pierwsza(moim zdaniem gorsza) w dużym skrócie wygląda tak:
<a href="http://google.pl" class="google">Google!</a>
a.google:visited{background:url('http://example.com?sitevisited=google'); }
Jeśli link jest odwiedzony zostanie wysłane zapytanie o tło do serwera example.com. Serwer wcale nie musi zwracać obrazka. Wystarczy, że doda użytkownika do swojej bazy danych.
Druga — znacznie ciekawsza — wykorzystuje JS, również działa w tle i także jest praktycznie nie widoczna dla użytkownika(trzeba zajrzeć do kodu). Co więcej nie musimy określać oddzielnych klas CSS dla każdego adresu. Przejdzmy do kodowania. Przede wszystkim potrzebujemy kontener na linki oraz styl dla odnośników odwiedzonych.
#tempLinkContainer a:visited{display:none;}
Używam display a nie np. color ponieważ poszczególne przeglądarki różnie interpretują kolory — Opera przechowuje je w postaci heksadecymalnej #RRBBGG, a Firefox w systemie dzisiętnym rgb(R,G,B). Display jest jednolity więc nie będzie z nim problemów. Czas na rdzeń skryptu JavaScript.
function checkLink(url) { var myLink = document.createElement('a'); myLink.href= url; var container = document.getElementById('tempLinkContainer'); container.appendChild(myLink); if(myLink.currentStyle) var visited = myLink.currentStyle.display=='none'; else var visited = document.defaultView.getComputedStyle(myLink, null).display=='none'; container.removeChild(myLink); return visited; }
Funkcja jako parametr przyjmuje adres url strony którą chcemy sprawdzić. Najpierw tworzony jest element a i uzupełniany jest jego parametr href. Następnie ten element jest umieszczany w naszym elemencie div. W ten sposób link otrzymuje odpowiednie ostylowanie jeśli jest odwiedzony. Jedyne co nam pozostaje to sprawdzenie parametru display. W tym celu należy pobrać styl obliczany naszego linku. Niestety IE(wraz z Operą) obsługują to troszke inaczej niż Firefox, Safari i inne przeglądarki — stąd ta instrukcja warunkowa. Wynik jest zapisywany do zmiennej visited, link niszczony i wartość na końcu zwracana. Efekt można zobaczyć tutaj. Zauważ, że linki odwiedzone otrzymują klasę visited(ustawienie koloru na zielony). Żadna pseudoklasa :visited, nie definiuje zielonego koloru — jest to zasługa JavaScript.
Oczywiście ta technika nie jest idealna — rozróżnia np. linki typu:
Jednak łatwo domyśleć się, że większość użytkowników odwiedzających np. Facebook.com najpierw uruchamia jego stronę główną. Technikę tą można użyć nie tylko do szpiegowania użytkowników. Można dzięki niej uatrakcyjnić stronę internetową serwując różne rzeczy w zależności od historii np. można umieścić informację na temat profilu na Facebook.com zamiast na nasza-klasa.pl jeśli użytkownik nie odwiedza naszej-klasy a odzwiedza facebooka.
W weekend planuję przysiąść do poprawek mojego blogu więc prawdopodobnie spróbuję dodać kilka ciekawych opcji.
Opisałem ten mechanizm trochę wcześniej u siebie:
http://blog.kowalczyk.cc/2010/01/10/javascript-wykrywanie-obecnosci-danej-strony-w-historii-przegladarki/
ale zawsze fajnie jest zobaczyć inne spojrzenie na temat. ;]
Komentarz by Tomasz Kowalczyk — 18 lutego 2010, 16:41
Cieszę się, że ktoś jednak czyta to, co napisałem
. Dla mnie podglądanie historii to jedynie ciekawostka(choć można użyć tego na wielu płaszczyznach). Myślę, że ataki na strony internetowe są ciekawsze więc postaram się w kolejnych artykułach skupić właśnie na nich.
Komentarz by Michał Środek — 18 lutego 2010, 16:58
Wrzuciłem Twojego bloga do RSSów dawno temu, tak więc jeśli śledzisz statystyki, to jestem jednym z czytelników. ;]
Czy jest to „tylko“ ciekawostka? — Postawiłem taką hipotezę w podsumowaniu swojego wpisu, ale myślę, że komentarz Tomka Wysockiego zmienia trochę sposób patrzenia na tą funkcjonalność.
Komentarz by Tomasz Kowalczyk — 18 lutego 2010, 17:29
BTW. Moim zdaniem powinieneś poprawić nagłówek — „moje rozmyślenia“ — nie brzmią do końca po polsku. ;] „Moje rozmyślania“ też jakoś dziwnie mi nie pasują, więc proponuję: „moje myśli“ albo „moje przemyślenia“.
Komentarz by Tomasz Kowalczyk — 18 lutego 2010, 17:32
Dzięki za uwagę, zmienię napis w weekend, gdy będę poprawiał resztę strony.
Komentarz by Michał Środek — 18 lutego 2010, 17:39