Eseguire piu' metodi usando la notazione "javascript:"

mercoledì 17 febbraio 2010 - 09.36

paquito_ita Profilo | Senior Member

Ciao,

un'applicazione web fornisce un campo associato ad un link dove inserire del codice javascript nella forma:
codice:
java-script:window.open('http://...','_blank');void(0);window.location.reload();
Questi metodi vengono chiamati correttamente. Tuttavia il refresh della pagina di partenza, tramite "window.location.reload()", avviene prima che alcuni dati vengano salvati sul DB dalla pagina aperta esternamente.

Ho pensato quindi di ritardare il refresh della prima pagina usando:
codice:
setTimeout("window.location.reload()", 8000);
Ora pero' quando il link viene cliccato, nella prima pagina appare il numero "3", tutto il contenuto sparisce (mentre la pagina esterna viene aperta correttamente), e nella barra degli indirizzi del browser viene settata la stringa con i metodi java-script:
codice:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Anche rimuovendo "void(0)" il risultato non cambia.

Come posso eseguire un refresh con ritardo dopo aver aperto una pagina esterna? Considerando che tale codice javascript viene inserito nel codice asp.NET/C#, quindi dovendo mantenere questa notazione.

Il problema e' che la pagina aperta esternamente contiene un iFrame, quindi penso che anche usando "parent.location.reload()" nella pagina esterna, faccia si che il metodo venga chiamato dall'iFrame nei confronti della pagina che lo contiene e non dalla pagina stessa nei confronti della pagina "padre".

Grazie mille!

Pinky Profilo | Junior Member

Controlla l'HTML generato.
Dovresti avere un qualcosa di simile:
<a href="{js_code}" />link</a>
con js_code valorizzato con la stringa che imposti tu.
Il problema potrebbe essere dovuto al fatto che nella stringa sono presenti dei doppi apici che di fatto "chiudono" il valore dell'attributo href.
Togli quel void(0) che non ha ragione d'esistere.
Sostituisci il setTimeout( "aaa", n); con setTimeout( 'aaa', n);

Se i dati che hai fornito sono corretti, questo problema è certamente presente.
Ma ho dei dubbi sulla correttezza delle informazioni che hai dato, hai davvero scritto "java-script" anziche "javascript"?

Comunque una soluzione più robusta (nonche più "naturale" e logicamente corretta) sarebbe far richiamare la funzione di refresh della pagina principale dalla popup aperta e che modifica i dati.
Crea un metodo per il reload sulla pagina chiamante:
function refresh() { location.href = location.href; } // non so se "reload" sia standard

Nella "popup" inserisci questo metodo (vado a memoria):
function reloadParent() { window.parent.refresh(); }

Importante:
"refresh" non è un buon nome, se per caso fosse una funzione gia presente nel javascript vai a sapere il browser su cui gira a chi da la precedenza!?
Non sono sicuro del "window.parent", ma comunque è qualcosa di simile, forse "opener".


ciao
Alessandro
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5