Metodi e proprietà
"location" è un oggetto di JavaScript che rappresenta la URL completa associata alla finestra.
In generale una URL ha questa struttura:
protocol//host:port/pathname#hash?search. Ogni porzione della URL rappresenta una proprietà della
location:
| Proprietà: |
| Proprietà | Descrizione |
| hash | Restituice il nome dell'ancora nella URL. |
| host | Restituisce l'host e nome di dominio, o l'indirizzo IP, di un server della rete. |
| hostname | Restituisce la coppia host:port della URL. |
| href | Restituisce l'intera URL. |
| pathname | Restituisce la path (il percorso) fino al nome del file. |
| port | Restituisce la porta di comunicazione usata dal server. |
| protocol | Restituisce il protocollo della URL, inclusi i due punti. |
| search | Restituisce il gruppo di parametri ricevuti dalla pagina compreso il "?". |
| |
| Metodi: |
| Metodo | Descrizione |
| reload() | Ricarica il documento corrente. |
| replace() | Carica una URL sostituendola alla voce attuale nella history. |
Una delle tipiche URL di JsDir si presta
quasi perfettamente ad elencare le varie proprietà di
location:
http://www.jsdir.com/userscripts/userscripts.asp?show=Categoria&filtro=Vari.
"Quasi" perché nel sito non usiamo quasi mai le ancore né abbiamo bisogno di specificare una porta dal momento che la
80 di default ci basta ed avanza. Dunque simuliamo una porta ed un'ancora nella URL e facciamo finta di niente :-)
Sulla nostra ipotetica URL dunque vediamo velocemente cosa ci restituiscono le varie proprietà per poi soffermarci su
search,
reload e
replace che sono effettivamente la proprietà ed i metodi più utili.
Questa è la URL su cui supponiamo di eseguire uno script:
http://www.jsdir.com:80/userscripts/userscripts.asp#inizio?show=Categoria&filtro=Vari
Estraiamo i dati della nostra tabella:
| Proprietà | Valore restituito |
hash | #inizio |
host | www.jsdir.com:80 |
hostname | www.jsdir.com |
href | http://www.jsdir.com:80/userscripts/userscripts.asp#inizio?show=Categoria&filtro=Vari |
pathname | /userscripts/userscripts.asp |
port | 80 |
protocol | http: |
search | ?show=Categoria&filtro=Vari |
| |
Raramente si usano queste proprietà lato client, almeno io non le ho mai usate, tranne href e search.
Di search cui ci occuperemo nella prossima pagina, vediamo invece "href" ed i due metodi.
href viene usato per cambiare pagina: ad esempio nei menu dinamici. Eseguire un'istruzione del tipo: self.location.href="pagina.html" ha lo stesso effetto del click su un link.
reload() consente di ricaricare il documento. Ci sono almeno due casi in cui si si chiede a JavaScript di ricaricare: con Netscape quando si usano dei layers e (pià in generale) quando sia necessario aggiornare la pagina ricaricandola dal server. Il primo caso si ha per un bug di Netscape. Se la finestra del browser viene ridimensionata il programma distrugge gli oggetti ed usando i layers con JavaScript (ad esempio per muoverli ecc.) se lo script richiede operazioni sui layers, non trovandoli più genera errori. La soluzione a questo bug è includere l'event-handler "onResize" nel BODY: <BODY .... onResize="if (document.layers){location.reload()}">. Quest'istruzione risolve il problema: se il browser viene ridimensionato l'event-handler scatta, e se il documento sta girando su Netscape la pagina viene ricaricata.
Notiamo che reload() non ricarica la pagina dal server. Se il documento è disponibile nella cache del browser, il reload avviene rifrescando da questa. Se invece abbiamo necessità di ricaricare dal server (ad esempio la pagina è generata da ASP o da un CGI o comunque siamo certi che qualche dato della pagina pescato da un database è cambiato), useremo reload(true). Passando il parametro true il browser ignorerà la cache ed invierà una richiesta al server come se accedesse alla pagina per la prima volta.
replace() fa quasi lo stesso lavoro di href: si usa così: self.location.replace("pagina.html"), ma a differenza di href la nuova pagina prende il posto dell'attuale nella history del browser, cosi che se il nostro visitatore clicca sul bottone "indietro" del browser non torna alla pagina che ha eseguito il replace, ma alla pagina precedente.
Cerchiamo di essere più chiari con un esempio: supponiamo di essere in una pagina "pagina1.html" che contiene un link come questo: <HREF="pagina2.html">Pagina 2</A>. Nella pagina 2 viene eseguita da JavaScript questa istruzione: self.location.replace("pagina3.html"). Ora l'utente è davanti alla pagina 3. Se clicca sul bottone Indietro del browser si aspetterebbe di ritornare alla pagina 2, invece ritorna alla pagina 1! Perché quando il browser ha eseguito il replace() non ha registrato il cambio di pagina. Questo può essere utile quando ci siano di mezzo dei form e delle interazioni con il server tali che non vogliamo vengano rieseguite (ad esempio scrittura in un database), anche se conviene comunque prendere provvedimenti lato server, perché se un utente ha l'interprete JavaScript disabilitato il replace() ovviamente non funzionerà.