Tag: hidebykeyword

  • Greasemonkey e localStorage

    Tentando di scrivere una nuova e più completa versione dello script FFHideByKeyword mi sono scontrato con un subdolo e fastidioso bug di Greasemokey, il famoso script engine per Firefox che permette di modificare il comportamento ed il layout di una pagina HTML. Il bug in questione è legato all’utilizzo del localStorage, una tecnologia introdotta con HTML5 alternativa ai vecchi cookie, tecnologia che uso per archiviare le parole chiave indesiderate scelte dall’utente. La tecnologia è supportata dai maggiori browser [è possibile fare un test a questo indirizzo: HTML5 test], fornisce delle API chiare e facili da usare, e mi è quindi sembrato un peccato non sfruttarla.
    Ma veniamo al bug. La parte subdola sta nel fatto che non tutte le API sono disponibili, e quella che manca è la proprietà window.localStorage.length, che riporta il numero di coppie chiave/valore presenti nello storage. La proprietà è molto importante, perché in assenza di iteratori conoscere questo valore è l’unico modo pulito per accedere agli elementi, con un classico ciclo for:


    for (var i = 0; i < window.localStorage.length; i++) { k = window.localStorage.key(i); myFunction(window.localStorage.getItem(k)); }

    Ho usato il termine pulito perché in effetti è si possibile usare un metodo alternativo, ma sinceramente lo trovo brutto e per nulla ottimizzato. Il seguente ciclo potrebbe funzionare, ma non l'ho testato:


    var i = 0;
    if (window.localStorage.key(i) != null) {
    do {
    k = window.localStorage.key(i);
    myFunction(window.localStorage.getItem(k));
    i++;
    } while (window.localStorage.key(i) != null);
    }

    Il bug è facilmente verificabile.
    Il seguente codice HTML è funzionante:








    mentre il seguente userscript no:


    // ==UserScript==
    // @name Length Test
    // @namespace me
    // @description A test for localStorage.length
    // @include http://www.google.it/
    // ==/UserScript==

    var out = document.getElementById("ghead");
    window.localStorage.setItem("test", "test");
    out.innerHTML += "Getting data: " + window.localStorage.getItem("test") + "
    ";
    window.localStorage.setItem("test1", "test1");
    out.innerHTML += "Total count: " + window.localStorage.length;

    Qui c'è la segnalazione, direi scarsamente considerata, e qui il thread nel Google Group relativo. In attesa di un bugfix, lo sviluppo dello script è interrotto.

    [tags]greasemonkey, ffhidebykeyword[/tags]

  • #hidebykeyword, la gestione delle keywords

    Una breve spiegazione sulla gestione attuale delle keywords.
    Per aggiungere una keyword all’elenco di quelle che si vuole nascondere bisogna inserirla nell’apposto campo e premere Hide. Se non c’è il match tra la kw e i post, questa rimane visualizzata nel campo di inserimento, viceversa i post spariscono e la kw appare sotto al campo di inserimento assieme al relativo conteggio. Premendo Unhide i post relativi vengono mostrati, e la kw viene rimossa dall’elenco: a meno di agire dalle impostazioni del browser, questo è l’unico modo per eliminare una kw dalla lista. Ciò significa che le kw sono persistenti. Se non è stato fatto Unhide, ma la kw e il suo conteggio “spariscono”, vuole dire che la timeline attualmente mostrata non contiene più i post incriminati, “passati più in basso” per fare spazio a quelli nuovi. Ma la kw in questione è ancora attiva, e se ad un successivo refresh [o ricezione di nuovi dati] viene rilevata una corrispondenza la kw torna a fare il suo lavoro di pulizia.
    Tutto questo, ovviamente, a meno di bug nello script.
    In Chrome è possibile visualizzare ed editare l’elenco delle proprie kw tramite -> Strumenti -> Strumenti per sviluppatori -> Storage -> Local storage. La prossima versione dello script consentirà una gestione più flessibile delle kw tramite un mini pannello di controllo a scomparsa.

    [tags]friendfeed, hidebykeyword[/tags]