Mniej ssące window.alert()
09 grudnia 2006

Nie wiem jak w Waszej ulubionej przeglądarce zachowuje się alert(), ale w moim Firefoksie nie dość, że jest modalny to jeszcze zabiera fokus jakiemukolwiek innemu tabowi. Do tego plugin Flasha przestaje płynnie odtwarzać filmy gdy nad oknem wisi sobie ten dialog (YouTube). Po prostu gra mi na nerwach.
Po dzisiejszej nocy kodowania już trochę mniej. Napisałem sobie skrypt do Greasemonkey podmieniający trwałe okienko na wypozycjonowaną warstwę. Dzięki temu mogę otrzymać nawet 10 powiadomień na raz, podejrzeć dowolne z nich, zamknąć wszystkie wciskając 10x Enter i wreszcie - nie muszę żadnym z nich się przejmować dopóki nie zechcę przełączyć się na tab, w którym grzecznie czekają.

Nie trzeba też wymieniać możliwości powiększania tekstu i bezproblemowego odczytania wysokiego nawet na 3 ekrany alerta - wystarczy przewinąć w górę stronę. Ostylowana przeze mnie „kontrolka” powinna wpasowywać się w Wasz system i wygląd Fx, korzystałem ze słów kluczowych i ogólnych stylów.
Poprawiłem także wyświetlanie nad flashem, ale podejrzewam, że mogą być problemy z niektórymi stronami. Muszę też dopisać obsługę object. Z pomysłów jeszcze zostało przesuwanie alertów mychą.

Jednak w tytule jest napisane „mniej” a nie „wcale”. Greasemonkey ma swoje ograniczenia i nie jest w stanie przechwycić zdarzeń występujących wcześniej niż DOMContentLoaded (załadowanie DOM, bez np.: obrazków). Chciałem także uwolnić swoją przeglądarkę od modalnych confirm (Blox.pl i genialne zabezpieczenie przed treścią dla dorosłych) i prompt - udało mi się zrobić prawie identyczny interfejs, ale nie przeskoczę braku możliwości przekazania wyniku działania funkcji. Tak czy inaczej skrypt działa całkiem dobrze i jeśli jakiś autor-sadysta nie atakuje nas alert() w script to więcej go nie zobaczymy.
Download - alert.hack.user.js.
Z tego wpisu wynika też morał - staraj się nie używać window.alert(). Jeśli naprawdę nie musisz przykuć naszej uwagi do monitora, to po prostu nie przeszkadzaj i pokaż coś na stronie, w HTML-u.


