User.js dla Greasemonkey 0.6.4.
02 grudnia 2005
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:
element.onclick = function() { …tutaj kod… }
bądź takiej:
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.

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.
function elemClickHandle(event) {…tutaj kod…}
Aby kod nie został wykonany od razu, należy go powstrzymać przez dodanie na końcu:
function elemClickHandle(event) {…tutaj kod…event.preventDefault();}
A następnie dodajemy obsługę tego zdarzenia.
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:
var r = document.getElementById('elem');var t = Math.round(Math.random() * 3 + 4) * 1000;setTimeout("r.click()",t);
Gdy już taka działa:
var t = Math.round(Math.random() * 3 + 4) * 1000;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. :)


