Newsgroup: it.comp.lang.javascript
Titolo: riferimento finestra..

Ola!
Ecco il mio codice:
<script type="text/javascript">
<!--
	loadPDF = window.open("caricamento.html", "caricamento", "width=300, 
height=100, toolbar=no, statusbar=no, scrollbars=no");
	window.location.href="makepdf.php?idprev=<?=$nextid?>&pop=1";
 
//-->
</script>
Allora... io devo fare un pdf in base a dati in sessione php, ma questo non e' 
un problema di questo ng :P
Il mio problema e' che dato che la generazione del pdf puo' metterci molto tempo 
(che si traduce in secondi), io vorrei avere una finestrella che mi dice che sta 
lavorando... ed e' per quello che apro prima un popup dove dentro c'e' una 
semplice animazioncina...
Questa animazione non posso metterla direttamente nella pagina che fa il pdf 
perche' non devo mandare nulla al browser mentre lo costruisco...altrimenti da 
errore...
Ora... come posso fare a far chiudere la finestra di notifica costruzione pdf al 
termine della procedura? Vista la possibilità di includere javascript nel pdf 
volevo far in modo che l'ultima cosa che viene fatta nella pagina di costruzione 
sia aggiungere l'istruzione che chiude la finestra... ma come faccio a prendere 
il riferimento della finestra per poterla chiudere?
caricamento.close() non funziona (forsea causa del location.href)... la finestra 
non si chiude e la console non da segni di vita, probabilmente perche' lo script 
e' dentro il pdf... se metto print() dentro il pdf mi compare la maschera di 
stampa, quindi credo si possa fare anche quello che intendo fare io... almeno 
spero :)
La soluzione alternativa che mi viene in mente e' fare al contrario...cioe' 
aprire nel popup la pagina che fa il pdf e la fare il location.href su 
caricamento.html e ridimensionarla... sarà la strada piu' semplice, pero' se si 
puo' fare nell'altro modo...quantomeno per imparare qualcosa di nuovo :)
Grazie!
Viandante

 Ola!
Niente... non si puo' fare... almeno stando a quello che ho visto in rete... e 
neanche la mia seconda soluzione e' fattibile... pazienza!
V

 V
si puo fare tranquillamente
<html>
<head></head>
<body>
<img src="animazioncina.gif" />
<?php
// crei il pdf
// salvi il pdf su disco
//
?>
<script type="text/javascript">
location.href='<?php echo $nomeFilePdf; ?>';
oppure crei uno script php che manda al browser il file con un mime/type
appropriato
</script>
?>
</body>
</html>
-- 
Tutti vogliono tornare alla Natura, ma nessuno ci vuole andare a piedi.
		-- J. A. Wollensky

 
Si infatti questa e' l'unica soluzione che ho trovato pure io... ma non e' 
quello che volevo fare inizialmente... io non volevo salvare il file pdf su disco...
grazie!
V

 quello che volevo fare inizialmente... io non volevo salvare il file pdf su disco...
Scusa, ma non vedo il nesso con quest'ultima cosa ed il post originale,
deve esserci qualcosa che mi sfugge.
E soprattutto, quest'ultima parte non è di certo una questione relativa a
questo newsgroup.
-- 
ZER0
~ "Lord Pando è il mio orsacchiotto di pezza.
Si veste di nero, si fa dei tatuaggi in faccia e dice
che è passato al Lato Oscuro... ma secondo me è solo l'adolescenza."

 
ViandanteOscuro scriveva nel post originale:
"Questa animazione non posso metterla direttamente nella pagina che fa
il pdf perche' ***non devo mandare nulla al browser mentre lo
costruisco*** ...altrimenti da errore... "
   ho suggerito prima di costruire (anche un file temporaneo) e poi di
inviare ...
ovviamente cosi' diventa off-topic
-- 
Un uomo buono puo' essere stupido e tuttavia rimanere buono.  Ma un
uomo cattivo non puo' assolutamente fare a meno di essere intelligente.
		-- Maksim Gorkij

 ovviamente cosi' diventa off-topic
In tal caso - sempre tenendoci OT - non capisco sinceramente dove stia il
problema. Può benissimo fare a meno di scrivere il file PDF su disco.
Ovvero, qualcosa tipo:
<?php
	if (isset($_GET["makepdf"]){
		// crea il PDF e ne fa l'output al client coi corretti header
	}else{
?>
<script type="text/javascript">
location.href="stessapagina.php?makepdf";
</script>
<?php	}?>
Dove ovviamente "stessapagina.php" è il nome della pagina corrente che, se
vuole, può anche riprendere da qualche variabile d'ambiente in PHP o da
Javascript.
Ma non credo che sia quello che serva lui; perché quando si "esegue" un
cambio di link, la vita della pagina corrente "cessa". E con essa tutte le
animazioni gif, musica di file midi, etc.
Mi pare che solo su IE6, l'animazione di una gif continui.


 problema. Può benissimo fare a meno di scrivere il file PDF su disco.
beh... no... se mando direttamente in file al browser la finestrella temporanea 
dove scrivo "generazione pdf in corso" non posso chiuderla... perche' non posso 
mandare output al browser... ne' prima di iniziare a costruire il pdf ne' 
tantomeno durante...pena errori...
Dato che con js non ho trovato soluzioni avevo già fatto come suggerito da 
hk3project...quindi ho dovuto salvare il pdf su disco, cosi' non termina 
l'esecuzione della pagina, e poi fare il redirect...

 hk3project...quindi ho dovuto salvare il pdf su disco, 
Ugualmente puoi evitare di salvare il file su disco in almeno un paio di
modi. Ma prima, la domanda è: dato che fai ugualmente un location.href alla
fine, e lo fai nella medesima finestra (mi baso sul codice scritto da hk3,
tu non hai postato alcunché quindi non posso saperlo), se uno invece di
"salvare" il pdf lo "apre"?
Lo apre dentro una finestra di popup miserrima? (che a quel punto, se la
chiudi, o non te la fa chiudere o l'utente poverino si vede chiudere il
file pdf appena generato)


 "salvare" il pdf lo "apre"?
Io ho postato il codice nel primo messaggio... lo riposto:
Adesso pero' e' diverso:
window.location.href="caricamento.php?id=<?=$nextid?>";
faccio caricare nella pagina corrente la pagina con la gif animata... 
all'interno di quella pagina ne apro un'altra dove costruisco il pdf
window.open("makepdf.php?idprev=<?=$_GET["id"]?>&pop=1","loadPDF","width=900,height=600,toolbar=no,statusbar=no,scrollbars=no");
dentro questa finestra aperta crea il pdf, lo salva su file, chiude il genitore 
(la finestra con la gif) e fa il redirect sul pdf creato...cosi:
<script type="text/javascript">
<!--
opener.close();
window.location.href='temp/doc.pdf';
//-->
</script>
il pdf devo salvarlo altrimenti mi apre il pdf e il flusso della pagina termina 
senza farmi fare altro...
in origine io volevo grazie al supporto javascript su pdf mandare la close() 
sulla finestra con la gif, quindi senza salvare il pdf, ma farlo direttamente 
DAL pdf... appurato che non posso farlo ho trovato una soluzione alternativa che 
mi obbliga a salvare il pdf.
Ovviamente sono aperto a soluzioni piu' carine :) con javascript ovviamente

 mi obbliga a salvare il pdf.
Cosa succede se uno chiude la pagina dove viene mostrata l'animazione prima
che il file sia stato scaricato nella popup? E cosa succede invece alla
pagina dell'animazione se uno chiude la popup prima che abbia completato il
suo lavoro?
Mi mancano dei passaggi nel flusso logico del programma.
-- 
ZER0
~ "Lord Pando č il mio orsacchiotto di pezza.
Si veste di nero, si fa dei tatuaggi in faccia e dice
che č passato al Lato Oscuro... ma secondo me č solo l'adolescenza."

 
Salvando il pdf su file non ho piu' nessun problema... far vedere la popup con 
l'animazioncina era qualcosa di carino che volevo fare... ma salvando il file 
posso far comparire tutto tranquillamente nella finestra...
In sostanza... ora che salvo non ho piu' nessun tipo di problema... ma devo 
salvare... cosa che io non volevo inizialmente...
Viandante

 salvare... cosa che io non volevo inizialmente...
Se ti sta bene così, evitiamo di continuare il discorso, visto che per
ottenere ciò che vuoi bisogna fare un po' di cose arzigogolate; e
soprattutto l'approccio dipende moltissimo dal contesto applicativo, che
quindi prima devo capire chiaramente.
-- 
ZER0
~ "Lord Pando è il mio orsacchiotto di pezza.
Si veste di nero, si fa dei tatuaggi in faccia e dice
che è passato al Lato Oscuro... ma secondo me è solo l'adolescenza."

 
a me cosi' sta bene... pero' come detto se esiste una soluzione che mi permetta 
di non passare dal salvataggio del file sarei piu' contento... ora e' come se 
avessi un file temporaneo... che in teoria dovrei poi eliminare per fare le cose 
ben fatte...
poi dipende da quanto arzigogolate sono queste cose che dici :)
riassumo quello che faccio, cosi' magari ti e' piu' chiaro il tutto:
creazione preventivo
  |-> visualizzazoine riepilogo preventivo
      |-> salvataggio dati preventivo su db (se tutto ok)
          |-> creazione pdf
la fase di creazione del preventivo ora e' fatta tutta in una finestra, dove 
compare l'animazione, costruisco il preventivo, lo salvo, facco io redirect sul 
preventivo salvato.
Obbiettivo: nella stessa finestra visualizzare l'animazione, costruire il 
preventivo, visualizzarlo, senza passare dal salvataggio e dal redirect. tutto 
nella stessa finestra.
Viandante

 nella stessa finestra.
Qui le soluzioni si biforcano: 
a) puoi far visualizzare un messaggio, graficamente carino quanto vuoi, con
immagini di sfondo, o anche direttamente un filmato flash se vuoi, ma
*senza* animazioni gif. Le animazioni gif si stoppano quando cambi
location, come ho già detto, a meno che tu non stia usando IE6.
Ed è la soluzione di cui ti avevo già accennato.
Il tutto, usando un'unica finestra, ma senza salvare il file.
b) Puoi aprire l'animazione su un oggetto window diverso da quello che
conterrà il PDF. Anche qui l'approccio si biforca ulteriormente:
b.1) Apri due finestre, quella che contiene l'animazione e quella che
conterrà il PDF. L'approccio che avevi usato precedentemente con
caricamento.php e makepdf.php per intenderci. Solo che a generazione
avvenuta, makepdf.php chiuderà la finestra contenente l'animazione di
caricamento (il passaggio che ti manca)
b.2) Apri una sola finestra, dentro la quale inserisci l'animazione e
imposti (o crei dinamicamente) un iframe. A generazione avvenuta "spari"
l'iframe per tutta la pagina ed elimini/nascondi l'animazione.
Il vantaggio / svantaggio di quest'ultima è che l'indirizzo della finestra
non mostra l'url file PDF ma quello della finestra contenitrice,
ovviamente.
Il che potrebbe per te essere un problema, come invece un vantaggio,
dipende - come sempre - dal contesto. Ad esempio, dato che sei in una
popup, potresti inserire una toolbar sopra l'iframe con pulsanti per la
stampa, chiusura della finestra, e amenità di questo tipo.


 
qui grosso modo e' come quella di prima... se non salvo, il codice dell'iframe 
relativo alla sua "espansione" non verrà mai eseguito.
Ora... o mi sfugge qualcosa di basilare nelle tue spiegazioni... o non so... 
praticamente sono tutti tentativi che ho fatto... il problema e' che se io, 
senza salvare il pdf, mando anche solo <html> al browser... alla fine il pdf non 
lo manda su perche' il browser ha già ricevuto qualcosa... e mi da l'errore...
Praticamente:
senza salvare:
<?php
costruzione pdf
$pdf->Output(); // manda direttamente al browser
?> // stop non viene piu' eseguito nessun codice, fine
se nella fase di costruzione, o prima, faccio chesso' un echo "<html>" lui manda 
al browser l'echo... arrivo a $pdf->Output() e mi da errore.
salvando:
<?php
costruzione pdf
$pdf->Output("nome.pdf", "F"); // salva il file
?>
//il codice seguente viene eseguito in quanto al browser non viene mandato nulla
<html>
</head>
...

 Ora... o mi sfugge qualcosa di basilare nelle tue spiegazioni... 
Ti manca, appunto, i passaggi che permettono di eseguire del codice dopo la
generazione del server del pdf, nel tuo contesto applicativo.
Il fatto è che non sto a spiegarti per ognuna di queste soluzioni il codice
nei minimi termini, altrimenti si fa notte. :) Quindi ti ho solamente
elencato le possibilità, in modo che tu potessi esprimere la tua preferenza
su una di queste, e lavorare su quella.
A quel punto, credo che sarai anche in grado di sviluppare le restanti in
modo autonomo suppongo, ma almeno evito di entrare nei dettagli di ognuna
di queste.
Certo, se mi vuoi assumere come consulente e mi paghi per questo il
discorso cambia :PpPp


 
ehm....

 ehm....
tsk.. braccine corte... :D


 tsk.. braccine corte... :D
ma noooo, cosa te lo fa pensare?? :P
grassie ancora!
Viandante