Newsgroup: it.comp.lang.javascript
Titolo: window.open problemi

Ciao a tutti,
ho un probleme con una funzione JavaScript che dovrebbe fare una semplice(?)
window.open
il codice è questo:
function newWindowSubmit(formName){
  win2.window.open(window.location);   // apro una nuova finestra identica
alla precedente
  win2.document.forms[formName].submit(); // voglio fare la submit della
nuova finestra
}
eseguendo questo codice mi apre la nuova finestra ma mi da un'errore quando
deve fare
la submit dicendo che win2.document.form..... è nullo o non è un oggetto.
la cosa incredibile è che se tra le due righe di codice metto:
win2.alert("qualsiasi cosa");
FUNZIONA!!!
com'è possibile???
grazie a tutti e ciao

 grazie a tutti e ciao
Ciao

 ha scritto nel messaggio
news:be0vkj$j8s$1...@ID-196857.news.dfncis.de...


 com'è possibile???
Perche' win2 e' un oggetto window valido, ma evidentemente non contiene 
alcun form con quel nome.
Il codice di prima non e' per nulla chiaro.
win2.window.open(window.location)
cos'e'?
win2 esiste gia'? Parrebbe invece che sia il puntatore alla nuova 
finestra, ma allora non dovrebbe cmq funzionarti, ed il codice sarebbe:
var win2=window.open(window.location.href);
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)


hai ragione ho scritto male, il codice giusto è:
win2 = window.open(window.location);

 win2 = window.open(window.location);
Me lo immaginavo, ma il codice giusto e' quel che ti ho scritto prima:
var win2=window.open(window.location.href);
devi dichiarare al var a meno che tu non voglia che sia una variabile 
globale esterna alla funzione, e window.location e' un oggetto, non una 
stringa, mentre la window.open vuole una stringa come primo parametro, 
ed essa la ricavi dalla proprieta' href dell'oggetto.
Il fatto che ti possa anche funzionare, non significa che sia corretto 
:)
Chiarito questo (win2 poteva anche essere un puntatore esterno), il tuo 
problema come ti ho detto, e' che nella finestra che hai appena creato 
non esiste la form che cerchi.
Questo perche' come giustamente ha precisato AntoS, tu esegui due 
operazioni consequenziali:
win2=window.open()
win2.document.etc... 
che vengono fatte una dopo l'altra. Ma quando esegui la seconda 
operazione (ovvero accesso agli oggetti della pagina), la pagina non 
e' stata ancora caricata.
Quindi per lui non esiste alcun oggetto all'interno di essa, ed e' per 
questo che ti da' errore.
Soluzioni ci sono, ma la domanda e': Come mai devi ricaricare LA STESSA 
pagina, in un altra finestra, e fare il submit in quest'ultima? 
Sinceramente, non vedo alcun motivo pratico ne' logico, c'e' 
sicuramente un approccio migliore.


 > hai ragione ho scritto male, il codice giusto è:

sono sicuro anch'io che ci sia un approccio migliore, ma mi tocca fare così.
Spiegarlo sarebbe troppo lungo.
Grazie lo stesso ciao

 Grazie lo stesso ciao
Ma come *grazie lo stesso*, ti ha detto che eventualmente le soluzioni ci
sono... me ne vengono in mente un paio...pero' dipende, finche' non sei un
po' piu' chiaro...

 </Premessa>
No, in realta' il problema da te individuato era un errore di copiatura 
(altrimenti non poteva funzionare il codice); il primo a dire 
chiaramente cosa non andava e' stato AntoS.


 Spiegarlo sarebbe troppo lungo.
Come vuoi tu, ma allora evita di chiedere consiglio all'NG se ci 
impedisci di darti una mano.
BTW, buona risoluzione.


 chiaramente cosa non andava e' stato AntoS.
Dot!

 la cosa incredibile è che se tra le due righe di codice metto:
Il problema, secondo me, è che la seconda finestra non è ancora del tutto 
carica quando viene richiesto il submit del form.

Eccomi qua,
ragazzi scusate ma il mio capo pretendeva che fosse fatto cosě
e prima di fargli capire che ci potevano essere altre strade
ho duvuto passare 4 ore con lui a fianco a provare e riprovare....
L'architettura di questo progetto č piuttosto complessa, io ci lavoro da
poco
e non sarei stato in grado di spiegarvi in modo esaustivo il contesto.
Comunque sono riuscito a fare quello che dovevo senza dovere
duplicare la pagina, come ZERO aveva suggerito.
Spero di essermi spiegato.
Ciao a tutti

 wrote in message
news:3nb1eb...@192.168.1.1...

vero, per fortuna ho trovato un altro modo
grazie e ciao

 duplicare la pagina, come ZERO aveva suggerito.
Mai detto di dover duplicare la pagina.



Infatti tu mi hai suggerito di trovare un altro modo.
Ciao


 Infatti tu mi hai suggerito di trovare un altro modo.
Non era propriamente chiaro. :)
A proposito, come dico sempre, per farlo ritrovare nello storico ai 
newbie, e' sempre bene fornire la soluzione adottata ad un problema 
posto sull'NG.
Anche se l'approccio e' condivisibile o meno, puo' essere sempre utile 
per qualcuno (come dicevo, vi possono essere diverse soluzioni, dai 
timeout ai cookie o querystring, giusto per rimanere in tema di 
crossbrowsing).


 crossbrowsing).
Il tutto si riduce a questo:
le variabili con il $ davanti sono di Velocity, uno strumento che permette
di creare dei template con il suo linguaggio
per poi creare html. Comodo per non duplicare il codice.
    <form method="post" name="createPdf"
action="$link.setAction("TestcaseDB")/template/functions,testcase_ricerca,Be
gin.vm">
      <td>
       // Creo il link a cui mi devo collegare con la nuova finestra,
purtroppo non ho trovato un modo migliore per evitare di passare tutti i
parametri a manina.
#set ($ref =
$link.setAction('TestcaseDB').addPathInfo('eventSubmit_doPrint',
'a').addPathInfo("idTestcase","$testcase.getCodice()").addPathInfo("idCheckL
ist","$testcase.getCodiceChk()").addPathInfo("idCategoria","$testcase.getCod
iceCat()").addPathInfo("idProgetto","$testcase.getCodiceProg()"))
        // Questa macro crea un bottone che al clik eseguirà il JavaScript.
$ ref è dichiarato qui sopra
        #OnClickButton("createPdf" "Stampa" "1"
"javascript:window.open('$ref');")
      </td>
    </form>
in se la complessità della parte javascript è bassa, solo che mischiata a
Velocity, Turbine e Java mi ha messo in difficoltà.
Il tutto comunque crea un file .pdf in una nuova finestra.
Se volessimo vederlo per aprire una pagina qualunque:
    <form method="post" name="createPdf"
action="$link.setAction("TestcaseDB")/template/functions,testcase_ricerca,Be
gin.vm">
      <td>
         #set ($ref =" 
www.paginaqualunque.it
")
        <Input type="button" name="createPdf"
onClick="JavaScript:javascript:window.open('$ref');">Stampa
      </td>
    </form>
Ciao a tutti