Newsgroup: it.comp.lang.javascript
Titolo: window.opener e apostrofo

CIao a tutti.
In una pagina popup viene visualizzato un elenco con i comuni
d'Italia. Accanto ad ogni comune è presente un link che tramite
window.opener va a popolare un campo della form presente nella pagina
sottostante.
Inizialmente avevo un problema dovuto alla presenza dell'apostrofo nel
nome di qualche comune, che non faceva funzionare window.opener. Ho
risolto utilizzando il metodo Server.URLEncode (la pagina è scritta in
ASP classic). Adesso window.opener funziona, ma il campo della form
nella pagina sottostante, si popola di caratteri che non c'entrano
niente. Ad esempio nel caso del comune di ROMANO D'EZZELINO, il nome
viene trasformato in ROMANO+D%27EZZELINO (non so se si legge bene nel
post, comunque compare ROMANO, il simbolo più, la lettera D,il simbolo
percentuale, 27, EZZELINO).
Avete qualche suggerimento da darmi affinchè nel campo della form
torni la scritta "decodificata"?
Grazie. Giancarlo

 Grazie. Giancarlo
urldecode....

 - Mostra testo citato -
Sì, ma se non sbaglio URLDecode mi funziona solo se ricarico la pagina
sottostante, mentre con window.opener questo non avviene

 - Mostra testo citato -
No, scusa ho fatto confusione con un'altra funzione. Non riesco a
trovare URLDecode per ASP Classic.

 torni la scritta "decodificata"?
Hai la possibilità di popolare il campo della form senza aprire una
finestra separata usando opportunamente le tecniche ajax

 trovare URLDecode per ASP Classic.
non esiste... scrivitela...
va be oggi ti aiuto:
    Function URLDecode(str)
        str = Replace(str, "+", " ")
        For i = 1 To Len(str)
            sT = Mid(str, i, 1)
            If sT = "%" Then
                If i+2 < Len(str) Then
                    sR = sR & _
                        Chr(CLng("&H" & Mid(str, i+1, 2)))
                    i = i+2
                End If
            Else
                sR = sR & sT
            End If
        Next
        URLDecode = sR
    End Function

 la scritta "decodificata"?
oddio, non uso asp da una botta di anni, quindi non sono sicuro; prova 
comunque con unescape:
 
https://developer.mozilla.org/En/Core_JavaScript_1.5_Guide/
Predefined_Functions/Escape_and_unescape_Functions
(anche server-side puoi usare escape-unescape, a meno che non usi quella 
fetecchia di vbscript)

 - Mostra testo citato -
Ti ringrazio molto, ma (se non ho capito male) questa funzione la
dovrei mettere nella pagina di "origine" per decodificare
l'informazione passata dalla pagina popup. A questo punto però, sono
costretto a ricaricare la pagina "origine"? Altrimenti  la funzione
non si applica, giusto?

 niente.
Va visto come passi il dato e poi come lo ripeschi. Facendo le cose
a modo, ASP ti ridecodifica i dati che passi i GET e POST da s�. Se
ci� non accade, vuol dire semplicemente che non le fai a modo.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 improbable, must be the truth."
La pagina popup di scelta del comune, dovrebbe essere utilizzata per
popolare i campi corrispondenti si diverse form. I campi, pur
ospitando sempre il nome del comune e la sigla della provincia,
possono avere dei nomi diversi. Per questo motivo, quando viene aperta
la pagina popup vengono passati anche dei parametri a tale pagina,
quali: il nome della form e i nomi dei campi comune e provincia.
Premesso tutto ciò, quando l'utrente clicca sul link il codice è:
onClick="window.opener.<%=Request.Form("NomeForm")%>.<%=Request.Form
("NomeCampoComune")%>.value='<%=server.URLEncode((rs_comuni.Fields.Item
("de_comune").Value))%>'  ;  window.opener.<%=Request.Form("NomeForm")
%>.<%=Request.Form("NomeCampoProvincia")%>.value='<%=
(rs_comuni.Fields.Item("de_sigla_provincia").Value)%>'  ;  window.close
();"
I campi della pagina sottostante si popolano con i dati e la popup si
chiude.
In questo caso ASP non decodifica i dati GET e POST. La pagina
"origine" non viene ricaricata affinchè riprocessi i dati passati.

 ();"
A naso, mi sembra che tu ti stia inutilmente complicando la vita.
Quante form hai nella opener? Solitamente, non dovrebbero essere pi� di
una, e anche in quel caso abbiamo un ID per poterci riferire ad essa.
Quel che voglio dire, � che tutta la parte:
	window.opener<%=blablabla%>.value =
Puoi tranquillamente eliminarla e sostituirla con codice JavaScript.
Per quanto riguarda il valore da inserire, perch� fai un URLEncode? Non
ce n'� bisogno in quel punto � sbagliato. � quello che t'incasina tutto
dopo. � ovvio che poi ottieni ancora i dati encodati, � quello che stai
dicendo che ASP deve fare.
Se il tuo problema � che in alcuni comuni hai l'apice, e va a sballarti
l'associazione del valore, puoi banalmente risolverlo con una funzione:
HTML:
 
onclick="doSomething()"
SCRIPT:
function doSomething() {
	var frm = window.opener.document.forms["nomeForm"];
	frm.NomeCampoComune.value = "<%=rs_comuni("de_comune").value%>";
	frm.NomeCampoProvincia.value = 
"<%=rs_comuni("de_sigla_provincia").value%>";
	window.close();
}
Essendo in una funzione, per impostare la stringa con i valori Comune e
Provincia, puoi usare i doppi apici. Quindi, se anche il valore dovesse
contenere un apice, non ti causa alcun problema.
Un consiglio da chi ha lavorato in ASP Classic per una vita: passa a JS
come script engine, invece che VBS. Non solo JS � molto pi� flessibile,
e ci sono pi� librerie a giro, di VBS; ma puoi anche fare cose "carine"
come passare oggetti serializzati tra client e server. Ti semplifica di
molto la vita. In oltre puoi estendere i prototipi dei tipi nativi.. La
qual cosa risulta molto utile in diverse occasioni.
Ad esempio, nel tuo caso, avresti potuto in JScript fare qualcosa tipo:
	frm.NomeCampo.value = "<%=rs("comune").value.addslashes()%>";
Che ti avrebbe "escapato" cose come apice e doppio apice; quindi, anche
se la stringa avesse contenuto un doppio apice tutto sarebbe funzionato
a meraviglia.
Se ti interessa e devi lavorarci pesantemente su ASP Classic, ho un bel
po' di codice e librerie sviluppate negli anni che potrebbero aiutarti;
alcune delle quali possono girare tranquillamente sia client che server
side.
Puoi cambiare il linguaggio di scripting di default da IIS, oppure puoi
aggiungere solo nelle pagine che ti interessa scrivere in JScript, tale
header:
<% @Language="JScript" %>
Ti assicuro che i vantaggi e i benifici che otterrai, valgono lo sforzo
di migrare. Tra l'altro non devi imparare niente di nuovo, dato che hai
comunque JS come linguaggio (che usi comunque lato client) e per quanto
riguarda ASP, l'ambiente ti mette sempre a disposizione i medesimi tipi
di oggetti (Response, Server, Request, etc..).
