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.

element.onclick

Najnowszy Greasemonkey dla Firefoksa 1.5 może nie współpracować z niektórymi skryptami. W większości przypadków jest to spowodowane użyciem takiej konstrukcji:

  1. element.onclick = function() { …tutaj kod… }

bądź takiej:

  1. element.onclick = "document.getElementById('elem').style.display = 'none'"

Zamiast onclick mogłobyć onkeyup, onmouseover i inne zdarzenia. W takich przypadkach konsola JavaScript zgłasza błąd.

JavaScript Console Error

Wyjściem jest użycie, poprawnego z punktu widzenia nieinwazyjnego kodu, addEventListener dla tego elementu. Tworzmy więc funkcję obsługującą nasz klik i kopiujemy do niej wszystko co wsześniej mieliśmy w tamtej konstrukcji funkcji.

  1. function elemClickHandle(event) {
  2. …tutaj kod…
  3. }

Aby kod nie został wykonany od razu, należy go powstrzymać przez dodanie na końcu:

  1. function elemClickHandle(event) {
  2. …tutaj kod…
  3. event.preventDefault();
  4. }

A następnie dodajemy obsługę tego zdarzenia.

  1. element.addEventListener('click', elemClickHandle, true);

Pierwszy parametr to rodzaj zdarzenia, bez „on”. A potem następuje wywołanie naszej funkcji, która obsłuży to zdarzenie.

setTimeout("r.click()",t)

Zaobserwowałem także czepianie się przez konsolę takiej konstrukcji:

  1. var r = document.getElementById('elem');
  2. var t = Math.round(Math.random() * 3 + 4) * 1000;
  3. setTimeout("r.click()",t);

Gdy już taka działa:

  1. var t = Math.round(Math.random() * 3 + 4) * 1000;
  2. setTimeout("document.getElementById('elem').click()",t);

Oczywiście nie jest powiedziane, że w każdym niedziałającym skrypcie te dwa przypadki akurat powodują błąd. Jest więcej możliwości, można je znaleźć na Greasemonkey Wiki. Lecz ta pierwsza jest najczęstsza dla skryptów pisanych w domu na kolanie (a drugiej jeszcze nie rozgryzłem :P). Sam dzisiaj poprawiłem tak swoje trzy skrypty do Dark Throne. :)

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 02 grudnia 2005 o 20:53

Kategorie: Greasemonkey

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

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