Chiamate javascript tra sottodomini differenti

 
Finestre del browser padre e figlia

in alcune situazioni può capitare di dover aprire finestre figlie di quella padre, operazione che si può effettuare tramite javascript ricorrendo al semplice

window.open("http://www.miosito.tpl/finestra.html");

e può anche essere necessario trasferire informazioni dalla finestra figlia a quella padre.

Anche in questo caso javascript ci viene in contro, infatti possiamo utilizzare la chiamata:

window.opener.nomeFunzione(parametro);

per poter arrivare a trasferire l'informazione da una finestra all'altra; ovviamente nella finestra padre deve essere presente la funzione nomeFunzione e questa deve occuparsi di elaborare il parametro (o i prametri) in ingresso.

Questo passaggio, però, è valido solo se operaimo all'interno dello stesso sito, infatti se aprissimo una finestra presente in sito1.tpl da una pagina che si trova in sito2.tpl non potremmo effettuare le chiamate Questa operazione viene svolta per proteggere l'esecuzione di script maligni (cross-site scripting).

Nonostante tutto questo può essere necessario, in ogni caso, riuscire ad effettuare questa operazione da domini differenti, per esempio perché stiamo facendo dialogare due applicativi web differenti, che non possono o non devono trovarsi sullo stesso dominio (si trovano proprio su due server differenti).

Questa operazione, anche se non è possibile su domini differenti è possibile all'interno di due domini di terzo livello che appartengono allo stesso dominio di secondo livello, per esempio:

http://www.sito.tpl
http://sub.sito.tpl

infatti entrammbi condividono il dominio di secondo livello sito.tpl.

Per fare si che comunque tutto questo funzioni, però, è necessario impostare per le chiamte il document.domain in modo che siano equivalenti ed entrambi corrispondano al dominio di secondo livello che condividono.

Il risultato è che gli script risulteranno essere, per la finestra principale:

function apriFinestra(url) {
  document.domain = 'sito.tpl';
  window.open(url);
  return false;
}
function eseguiComando(text) {
  alert(text);
  return false;
}

mentre per la pagina che viene aperta:

function inviaInformazioni(text) {
  document.domain = 'sito.tpl';
  window.openr.eseguiComando(text);
  return false;
}

In allegato trovate due pagine di esempio da testare, ricordatevi di modificare il nome del dominio con quello da voi utilizzato.

Potete trovare maggiori informazioni relative al document.domain su:

AllegatoDimensione
File di esempio per finestre padre - figlio495 byte

Altri contenuti che potrebbero interessarti

  • SASS per i CSS con Compass (in ruby)
    Come indicato nell'articolo precedente abbiamo visto la comodità di usare un metalinguaggio per i CSS come SASS. Ovviamente i browser non sono in grado di utilizzare direttamente questi file, ma necessitano di ricevere del codice CSS standard. Questa operazione (NdA:la conversione da SASS a CSS)...
  • Nello sviluppo di siti web è preferibile operare in locale e trasferire il tutto sul server remoto solo una volta che si è ottimizzata la configurazione per lo scopo che ci si è prefissi. Ciò permette di avere una maggior velocità poiché non è necessario operare sul server trasferendo i file ogni...
  • Drupal si occupa esclusivamente della validazione lato server delle informazioni, ma spesso è consigliabile prevedere ad una prima validazione dei dati inseriti dall'utente lato client, in modo da evitare l'invio della richiesta limitando quindi le possibilità di errore. Ovviamente la validazione...
  • SASS per i CSS
    I CSS sono uno degli elementi che nel corso degli anni, nel settore del web, si sono meno evoluti dal pundo ti vista della struttura utilizzata. Nelle corso delle diverse versioni sono state aggiunge solo proprietà e selettori nuovi. Probabilmente penserete: Se non sono cambiati tantomeglio, evito...

Commenti

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4> <table> <thead> <tbody> <tr> <th> <td>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti