ugrás a tartalomhoz

Harc a türelmetlen felhasználóval

Joó Ádám · 2010. Jún. 4. (P), 19.13

A Twitter a sírba visz. Az egy dolog, hogy folyton kijelentkeztet, de mióta telepakolták rohangáló szövegekkel a főoldalt, vagy fél percen át tölti a szkripteket, amik közül úgy tűnik a login panelé az utolsó. Így rákattintva a böngésző átdob a bejelentkező oldalra, ahol már nem tölti ki automatikusan, s írhatom be kézzel. Hogyan csinálhatná okosabban a csiripelde?

Ha teljesítménynövelésről esik szó, szinte kötelezően elhangzik a JavaScript hivatkozások forrás végére helyezése. Ezzel nincs is semmi gond, azonban ez azzal jár, hogy eseménykezelőink csak késéssel jutnak érvényre, a türelmetlen felhasználó pedig az alapértelmezett eseménnyel fog csak találkozni.

A fenti problematikára kíván megoldással szolgálni ClickCatcher elnevezéssel Robert Nyman natív JavaScript, David Billskog pedig jQuery alapon.

A kódot a <head>-ben kell elhelyezni, betöltését követően elkapja az összes kattintást, és azokat, melyekhez saját eseménykezelőt kívánunk csatolni, várakoztatja egészen addig, míg az ezeket tartalmazó kód be nem töltődik, miután a szűrőt eltávolítja, és végül ismét kiváltja a kattintásokat a feltartóztatott elemeken.

(function () {
    var QUEUE = {
        clicks: [],
        
        click_handler: function (evt) {
            if ($(evt.target).hasClass("guarded")) {
                QUEUE.clicks.push({
                    evt:    evt,
                    target: evt.target
                });
                
                return false;
            }
            
            return true;
        }
    };
    
    $(document).bind("click", QUEUE.click_handler);
    
    $(document).ready(function () {
        setTimeout(function () {
            $(document).unbind("click", QUEUE.click_handler);
            
            for (var i = 0, il = QUEUE.clicks.length; i < il; i++) {
                $(QUEUE.clicks[i].target).click();
            }
        }, 0);
    });
})();

Tömörsége miatt fent a jQuery megvalósítás olvasható, ennek természetesen megvan az a hátránya, hogy előtte a keretrendszert is be kell tölteni.

A kód érdekessége a setTimeout() használata: mint az kiderült, második argumentumát 0-nak adva elérhetjük, hogy függvényünk a load eseménykezelők közül utolsónak fusson.

 
1

Jóde ez mennyivel növeli a

Török Gábor · 2010. Jún. 5. (Szo), 15.01
Jóde ez mennyivel növeli a felhasználói élményt? A türelmetlen látogató ugyanúgy várni fog az onloadig/domloadig, és attól még türelmetlenebb lesz, hogy kattint, és nem történik semmi.

Amúgymeg használj a Twitter API-ra épülő appot twitteléshez.
2

Növeli

Joó Ádám · 2010. Jún. 6. (V), 15.16
Én kivárnám azt az időt, amíg megjön a panel, csak nem tudom, az mikor van. Egyébként pedig lehet bővíteni a kódot, hogy valami kis visszajelzést adjon a felhasználónak, hogy pillanat türelmet.