GoogleGroupsFilter

Da lwiki.

Filtrare uno o più utenti con Google Groups... è parzialmente possibile.

Innanzitutto serve un accesso al DOM, e per questo si può usare un bookmarklet.

Siccome i bookmarklet confliggono con NoScript, chi ha NoScript lo deve autorizzare, e per non fare guai si sceglie una password - diciamo "kinetics". Poi in NoScript, nelle eccezioni XSS, si aggiunge:

   ^javascript:%20(function(kinetics)

Fatto questo si crea un nuovo bookmark per la seguente location, dopo aver modificato il codice seguente. Il parametro 'kinetics' non è usato, ma fa sì che qualsiasi altro bookmarklet non possa cominciare con la stessa sequenza e sfuggire a NoScript.

Il codice va messo tutto su una linea senza spazi e, se lo modificate, ricordatevi di fare escaping.

javascript:%20(function(kinetics){var%20el=document.createElement('div'),b=document.getElementsByTagName('body')[0];otherlib=false,msg=;el.style.position='fixed';el.style.height='32px';el.style.width='220px';el.style.marginLeft='-110px';el.style.top='0';el.style.left='50%';el.style.padding='5px%2010px';el.style.zIndex=1001;el.style.fontSize='12px';el.style.color='#222';el.style.backgroundColor='#f99';if(typeof%20jQuery!='undefined'){msg='This%20page%20already%20using%20jQuery%20v'+jQuery.fn.jquery;return%20showMsg();}else%20if(typeof%20$=='function'){otherlib=true;}%20function%20getScript(url,success){var%20script=document.createElement('script');script.src=url;var%20head=document.getElementsByTagName('head')[0],done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=='loaded'||this.readyState=='complete')){done=true;success();script.onload=script.onreadystatechange=null;head.removeChild(script);}};head.appendChild(script);}%20getScript('//code.jquery.com/jquery-latest.min.js',function(){if(typeof%20jQuery=='undefined'){msg='Sorry,%20but%20jQuery%20wasn\'t%20able%20to%20load';}else{msg='This%20page%20is%20now%20jQuerified%20with%20v'+jQuery.fn.jquery;if(otherlib){msg+='%20and%20noConflict().%20Use%20$jq(),%20not%20$().';}window.setInterval(function(){jQuery('span.g-hovercard[data-userid="XXXXXXXXXXXXXXXXX"]').closest('.IVILX2C-tb-W.IVILX2C-tb-V,.IVILX2C-b-G').hide();},250);}%20return%20showMsg();});function%20showMsg(){el.innerHTML=msg;b.appendChild(el);window.setTimeout(function(){if(typeof%20jQuery=='undefined'){b.removeChild(el);}else{jQuery(el).fadeOut('slow',function(){jQuery(this).remove();});if(otherlib){$jq=jQuery.noConflict();}}},2500);}})();

Al posto di tutte quelle "X", va messo l'ID di Google dell'utente desiderato. Cioè, indesiderato.

Per ottenerlo, basta cliccare sull'immagine dell'utente in modo da aprire la sua pagina Google, che è della forma

https://plus.google.com/u/0/XXXXXXXXXXXXXXXXXXXXXXXXX/...

...e al posto di quelle X c'è l'ID cercato.

Per chi non è utente di Google Groups, la cosa è più complessa, perché si può solo agire sul nome a video. Se vi ci volete divertire, siete i benvenuti.

Lo scriptlet lì sopra non fa altro che cercare dei DIV relativi a messaggi di un utente con quell'ID ogni 0.25s, e se li trova, cerca l'elemento radice e lo nasconde.

Il che vuol dire che nell'elenco dei post, i post compariranno, ma aprendoli si vede solo una pagina bianca.

Con poche modifiche si può alterare il DOM in altri modi, per esempio cambiando l'immagine dell'avatar della persona desiderata.

Comunque, una volta creato il bookmarklet, si va su Google Groups, si preme il pulsante del bookmarklet, e il filtro si attiva. Rimarrà attivo finché non viene ricaricata la pagina.

Mi aspetto che ogni tanto Google cambi quei selettori "IVILX2C", ma volendo si può usare la struttura stessa del DOM a colpi di .parent().