Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

Mniej ssące window.alert()

09 grudnia 2006

Kaskadowo ułożone custom-alerty

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ą.

Dowolna wysokość alerta oraz zwiększanie tekstu

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ą.

Wyświetlanie nad Flashem na YouTube

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.

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 09 grudnia 2006 o 05:41

Kategorie: Greasemonkey, JavaScript & DOM, Użyteczność

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. spać nie możesz?:>;p
    dobre, chyba się zainteresuje tym całym greasmonkey

  2. To ja mam dwa wnioski:
    1) W momencie jak wyskakuje kilka alertów, to żeby zamiast wyskakiwało kilka, to jeden layer ze strzałeczkami u dołu do przełączania poprzedni—następny alert + info ile alertów jest, i wówczas jedno okej do zamknięcia wsystkiego :]
    2) to teraz proszę o taką magiczną zabawkę dla opery :)

  3. No no, super, podoba mi się bo można się czasem wkurzyć na te alert’y. ! :]

  4. Wg. opisu to dobra robota, właśnie instaluje by przetestować ;)

  5. (Komentarz zmodyfikowany 11.12.2006 o 20:43)

    Czy taki denerwujący skrypt zadziała:
    for(;;) //Dawno nie używałem JS, czy to poprawny kod?
    window.alert(„Tekst”)

  6. GiM: Jak w IE konsola JS, co? :]
    Opera, hehs… nie chce mi się. Musiałbyś tam podmienić oprócz stylowania tego dialogu (używałem duużo -moz-) to unsafeWindow.alert na window.defineMagicFunction.alert czy jakoś tak i inaczej podpiąć style.

    Uzytkownik: Dobre pytanie. Zadziała (jeśli dobrze to rozpoznaję) i jeśli przeglądarka to wytrzyma, to może użytkownik zdąży zamknąć stronę. Normalnie i tak by nic nie zrobił.

  7. To może dodam bug#1: Po wyświetleniu okienka kod JS jest zatrzymywany(to chyba możliwe?)

  8. OMG Family Guy ;-)))
    A co do Alert()‘a to ja chyba po takich stronach nie chodzę, żeby mi to jakoś przeszkadzało ;-)

  9. BTW:
    Riddle, chyba coś nie działa Textile Lite ;)
    Dokładniej znacznik @code@ ;)

  10. Całkiem praktyczne :)

  11. A w Operze jako UserJS działa?
    Sprawdzał ktoś może?

  12. Nie działa :( .

  13. Ty, nareszcie coś praktycznego ;)
    Co prawda to wybitny półśrodek, ale zawsze jakiś postęp.

  14. Chyba lepszym rozwiązaniem było by pełne rozszerzeniem, bo to jest na prawdę pół środek.

  15. @zwierzak:
    Nie – W\w ten sposób mogę korzystać z tego wszędzie, gdzie mam Greasemonkey(np. na Epiphany). A tak musiałbym korzystać z Fx.

  16. Dla mnie mała różnica, ale możliwości tego roszerzenia wtedy były by na prawdę znacznie większe.

  17. Odcinając mnie od możliwości korzystania z jego (podobnie jak wszystkich używających Greasemonkey a nie używających Firefoxa). EOT – decyzja należy do Riddla.

  18. Da się przygotować gotowe rozszerzenie ze skryptu Gmk, ale to jest nadal półśrodek, bo nie można uzyskać pełnego zastępstwa alert().

    Prawdziwe rozszerzenie? Może kiedyś, na razie nie mam czasu się w to zagłębiać.

  19. Chyba w ogóle nie dziala mi Greasemonkey – nie moge zainstalowac skryptu, jak klikam „Install” to nic sie nie dzieje, nawet okienko sie nie chowa ;P

  20. ikari: Mam dokładnie to samo i nie chce mi się już dociekać dlaczego.

  21. Mnie również. FF 2.0 PL @ Win 2k3 R2 Ent Eng (ale jako workstation)

  22. Niezłe to. A już myślałem, że tylko mnie to wkurza – a kolejne wersje Fx’a przechodzą bez zmnian w tej kwestii. Chociaż... kiedyś było jeszcze gorzej – pamiętam czasy, gdy pod „jedynką” wpisanie błędnego adresu oznaczało „za karę” kliknięcie w OK i utrata wczytywanego adresu wraz z całą historią tabu – i biada tym, którym się np. Internet rozłączył akurat przy otwieraniu wielu tabów jednocześnie :). Oczywiście było rozszerzenie, które próbowało coś zrobić w tej kwestii (autorstwa Pike), ale niewiele zrobić mogło. Przed każdym kliknięciem w link trzeba było dokładnie rozważyć ewentualną stratę obecnie wyświetlanego adresu.

    W każdym razie, skoro Greasemonkey ma wspomniane ograniczenia, to może rzeczywiście spróbować stworzyć rozszerzenie… albo może namówić po prostu deweloperów do poprawek?

    Poniżej link do buga:

    https://bugzilla.mozilla.org/show_bug.cgi?id=59314

    Bug ma status „new”, ale niech Was to nie zmyli – zgłoszony został w roku 2000!!!

  23. Jakiś test?

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.