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

Commenti

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4>
  • 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