Archived posts in ' "javascript"

Back home

Greasemonkey e localStorage

01/12/2011

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:

1
2
3
4
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:

1
2
3
4
5
6
7
8
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
</head>
<body>
<div id="out"></div>
<script language="Javascript">
   var out = document.getElementById("out");
   window.localStorage.setItem("test", "test");
   out.innerHTML += "Getting data: " + window.localStorage.getItem("test") + "<br />";
   window.localStorage.setItem("test1", "test1");
   out.innerHTML += "Total count: " + window.localStorage.length;
</script>
</body>
</html>

mentre il seguente userscript no:

1
2
3
4
5
6
7
8
9
10
11
12
13
// ==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") + "<br />";
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.

Technorati Tags: ,

1 Comment

#hidebykeyword, la gestione delle keywords

09/23/2010

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.

Technorati Tags: ,

No Comments

#hidebykeyword v0.7.2.1

05/28/2010

“Piccolo” bugfix che dovrebbe far contenti gli utenti Firefox, sembra che lo script sia ora completamente funzionante, risolvendo il problema dei post che non venivano nascosti a fronte di una keyword già presente nello storico, visibile o meno nell’elenco. Ho capito che la gestione delle keyword è un argomento piuttosto sentito, quindi la prossima release sarà dedicata proprio a questo. Allo stato attuale, le keyword vengono registrate nel localStorage, e ci rimangono anche se nessun post le contiene, a meno che non si faccia click su Unhide, nel quel caso vengono eliminate. L’intenzione è di realizzare un’area nascosta per default, che viene mostrata cliccando su “qualcosa” [da definire], e che contiene le keyword archiviate, area nella quale sarà possibile aggiungere/togliere keywords indipendentemente da quelle che vengono già mostrare nella UI attuale. Mi sembra un buon modo per gestirle, ma sono ovviamente ben contento di sentire eventuali altre opinioni. In relazione a questo, volevo ricordare che la pagina dello script su Userscripts.org presenta due utili tab, “Discussions” e “Issues” [vabbè, c'è pure "Fans", ma mi pare eccessivo], che potrebbero [dovrebbero, eh] essere usate per contenere suggerimenti e discussioni circa lo script.

As usual, lo script, su GitHub e Userscripts.

Alla prox

Technorati Tags: , ,

No Comments

#hidebykeyword v0.7.2

05/20/2010

Un altro aggiornamento allo script, migliorie legate all’usabilità. Con questa nuova versione, infatti, è possibile aggiungere una keyword alla blacklist semplicemente premendo il tasto Enter nel box di input, bypassando il click sul tasto Hide. Come al solito, qui il repository e qui la pagina su Userscripts.

Enjoy, e alla prox :)

Technorati Tags: ,

No Comments

#hidebykeyword , aggiornamenti

04/27/2010

Aggiornamenti importanti riguardanti l’hidebykeyword!
Sembra che la lotta estenuante contro Chrome sia finita, e che finalmente questa scheggia di browser possa godere appieno delle potenzialità del mio script. Inizialmente ho temuto di dover sviluppare una versione specifica per Chrome, ma per fortuna sono riuscito a mantenere lo script crossbrowser, semplificando così la manutenzione/gli aggiornamenti; è bastato in realtà fare un detect del browser ove richiesto, e utilizzare funzioni aventi funzionalità uguali in entrambi. La novità di rilievo è la variazione della soluzione di storage per la blacklist delle parole, passando dai cookies al localStorage implementato in HTML5 [in questo sito è possibile vedere il livello di supporto del proprio browser alle nuove specifiche]: codice più snello e leggibile, una ventina di righe di codice in meno che su un totale di circa duecento hanno un peso rilevante.
Lo script è disponibile sia su Userscripts sia su Github: le due versioni sono ora in sync, ma in teoria il primo è per le versioni stabili, mentre il secondo per le release di sviluppo. Ogni commento è ben accetto, qui, su Friendfeed, per email, dove vi pare.

Enjoy it e alla prox

Technorati Tags: , ,

1 Comment