Avevo già accennato qualcosa su Greasemonkey nel mio post precedente. Non mi dilungo sull'utilità e sulle possibilità che Greasemonkey offre, voglio subito passare al sodo!
Una delle necessità principali quando si realizzano script per Greasemonkey è quella di andare a reperire dati esterni da integrare nelle pagine web che si stanno modificando. Come fare? Greasemonkey mette a disposizione la funzione GM_xmlhttpRequest tramite la quale è possibile fare chiamate asincrone verso un qualsiasi URL. Il frammento di codice seguente mostra un esempio di utilizzo:
1 GM_xmlhttpRequest(
2 {
3 method: 'GET',
4 serviceUrl,
5 headers: {
6 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
7 'Accept': 'application/atom+xml,application/xml,text/xml',
8 },
9 onload: function(responseDetails)
10 {
11 // Qui va inserito il codice di gestione della risposta
12 }
13 );
Nell'esempio viene richiamato l'url presente nella variabile serviceUrl e una volta ricevuta la risposta, viene eseguito il codice all'interno della funzione di callback. Ovviamente con la stessa sintassi posso richiamare anche un web service .NET.
Nel caso di un web service .NET non occorre fare niente di particolare. Nel caso in cui si volesse utililizzare la GET, bisogna abilitarla da web.config dato che di default non è disponibile. Il frammento di codice seguente mostra come abilitare la GET:
1 <system.web>
2 <webServices>
3 <protocols>
4 <add name="HttpGet"/>
5 < span>protocols>
6 < span>webServices>
7 ....
8 ....
9 < span>system.web>
E se il nostro web service .NET dovessere restituire oggetti complessi, custom entities o collection? Nessun problema. Utilizziamo il DOMParser sulla risposta XML del nostro web service. A questo punto possiamo navigare tra i nostri oggetti con semplici query e comandi. Qui di seguito un piccolo esempio:
var parser = new DOMParser();
var dom = parser.parseFromString(responseText,"application/xml");
var entries = dom.getElementsByTagName('custom_object_name');
Alla prossima!