Newsgroup: it.comp.lang.javascript
Titolo: Non viene eseguito l'onLoad del body

Salve a tutti,
   esco allo scoperto per un problema che mi sta facendo ammattire e vi 
sottopongo il quesito!!
Ho una pagina html che viene scritta da un plugin in questo modo :
...
document.open
document.write
document.close
...
La pagina risultante :
- esegue tutti gli script che sono contenuti nel body
- scatena tutti gli onload dei tag img
- ma NON scatena l'onload del body!!
E' come se l'informazione della fine del caricamento non arrivasse... o 
qualcosa di simile!!
Ho controllato che tutti i tag vengano chiusi correttamente ed ho anche 
inserito all'interno del body il seguente codice preso direttamente da MSDN
...
<SCRIPT FOR=window EVENT=onload LANGUAGE="JScript">
   window.status = "Page is loaded!";
</SCRIPT>
...
ma non viene eseguito :(((
Solo quando eseguo il refresh della pagina anche quell'onload funge che 
è una meraviglia
Avete qualche idea e magari qualcuno si è già trovato nella mia 
situazione ed è uscito vincitore :)
Grazie e ciao
   Paolo


La pagina viene scritta sul client e quindi l'onload è scritto dopo
l'evento stesso?

 
Scusami, ma non ho capito la domanda :-|
Provo a fare un esempio, così magari indirettamente ti rispondo :)
Il plugin scrive sul browser, con le 3 istruzioni postate sopra, una 
pagina analoga a questa :
....
<html>
   <body onload="javascript:alert("caricato body onload");">
     <img src="u.gif" onload="javascript:alert("caricata la gif");"/>
     <script>
       alert("eseguito lo script");
     </script>
   </body>
</html>
....
Ciò che vedo io è
1 - caricata la gif
2 - eseguito lo script
E BASTA :(((
L'alert "caricato body onload" non viene visualizzato
Spero di aver chiarito meglio la situazione....
Grazie ancora
   P.

   P.
Mi sembra che l'evento onload sia indefinito come momento di 
esecuzione... cioč non avviene all'inizio o alla fine ma durante: quindi 
averne due non dovrebbe essere possibile, altrimenti il secondo 
sovrappone il primo a cascata. Metti un solo onload nel body con la 
function che verifica il caricamento di tutti gli elementi che intendi 
verificare con l'alert.
Ciao :)

 Ciao :)
Prova fatta, ma il risultato è sempre lo stesso : niente esecuzione 
dell'alert dell'onload del body :(((


.*. ha scritto:

devi usare, a parere mio, un solo body onload.
Ciao :)

 Ciao :)
scusa: un solo onload e lo devi mettere nel body
Ciao :)

 qualcosa di simile!!
Premetto che non ho mai usato documwnt.write, quindi potrei scrivere
fregnacce.
E' possibile che l'evento onload sia scatenato quando la pagina (che
inizialmente è vuota) viene creata? Se è così, quando vai a scriverci
dentro l'evento onload si è già "estinto" e, ovviamente, non si ripeterà.
Giusto per... ma il modo in cui crei e popoli questa pagina qual è?
Potresti dare un link o postare un po' di codice (non troppo, però)?
-- 
Nando [?]
Apostolo della Prova

Nando ha scritto:

  "L'utilizzo dell'evento onload, evento definibile asincrono poichè
richiamato in un istante di tempo non noto, è indispensabile per capire
  che se avessimo scritto la procedura prendiElementoDaId( ... ) 
direttamente
  nello spazio riservato al JavaScript, ovvero nel tag <head> della pagina,
questa avrebbe generato un errore e non avrebbe modificato alcunchè 
all'interno
della stessa. Infatti prima del verificarsi dell'evento onload non è 
nota al
browser nemmeno l'esistenza di un elemento con id="paragrafo"."
Questo lo cito da: 
http://javascript.html.it/guide/lezione/2566/interazioni-semplici/
Spero che possa servire. :)
Ciao

 Spero che possa servire. :)
Sě ma che c'entra?


 
č un evento asincrono e credo che non se ne possano mettere due come 
nello script di .*.
[code]
<html>
   <body onload="javascript:alert("caricato body 
onload");alert("caricata la gif")">
     <img src="u.gif" />
     <script>
       alert("eseguito lo script");
     </script>
   </body>
</html>
[/code]
prova cosě..
ciao! :)

 nello script di .*.
Ma non mi pare proprio che ce ne siano due.



Vedi cosě scriveva. Ma tu lo script non lo hai visto? Forse non lo hai 
visto, dato che chiedi due righe di codice. Cmq, il nostro non sembra + 
interessato al topic, visto che non interviene piů... quindi continuare 
noi due mi sembra inutile.., non ti pare?
ciao :)


 ciao :)
Stammi bene.


 Ciao :)
E' quello che ho provato... ma mi è sfuggito il copincolla del codice 
vecchio :)
<html>
   <body onload="javascript:alert("caricato body onload");">
     <img src="u.gif"/>


 
Sono ancora interessato eccome, ma purtroppo (fortunatamente) non resto 
tutto il giorno di fronte al pc :)
Come postato sopra, l'ultimo codice provato č
<html>
    <body onload="javascript:alert("caricato body onload");">
      <img src="u.gif"/>
      <script>
        alert("eseguito lo script");
      </script>
    </body>
</html>
e l'onload del body non viene eseguito :(((

 browser nemmeno l'esistenza di un elemento con id="paragrafo"."
E' una scemenza.
Posto che so che non è farina del tuo sacco, quindi non sto "criticando" te,
beninteso.
Sto semplicemente correggendo la cosa per evitare che chi legge -
soprattutto i newbie e i posteri - imparino cose sbagliate.
L'evento onload viene scatenato quando la pagina è stata completamente
scaricata, e con questo intendo anche le risorse, ma il DOM completo viene
generato molto prima. Nei browser attuali appena il parser legge la chiusura
di un tag questo viene aggiunto al DOM.
Solo se l'articolo in questione fosse del '98, e fosse riferito unicamente a
Netscape 4.x, allora avrebbe avuto un minimo di ragione.
-- 
~ "When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 e l'onload del body non viene eseguito :(((
Questo viene eseguito?
-- 
~ Se i miei cattivi pensieri non fossero caricati a salve,
ogni giorno sarebbe una strage.

 Questo viene eseguito?
Si, lo script all'interno del body funge!!
Grazie e ciao
   P.

 modo (cookie o altro) per farli eseguire forzatamente una volta sola....
Ma l'evento onload a cosa ti serve, esattamente?
-- 
~ Una volta, qui, era tutto <TABLE>.

magari non c'entra niente...
e quello che scrivo è fuori luogo ma:
<body onload="javascript:alert("caricato body onload");">
questo non funzionerà mai perchè c'è un problema di apici :)
<body onload="javascript:alert('caricato body onload');">
questo già va meglio.
SLivio
ZER0 ha scritto:


 
Il codice che ho postato è esemplificativo e l'ho scritto al volo!!
Quello che va in esecuzione non ha problemi di apici... purtroppo :)
Grazie cmq
   P.

 quanta libertà tu abbia, quali sono i tuoi paletti.
L'unica libertà che ho è sulla pagina che il plugin deve scrivere, 
perchè gliela fornisco io. Tutto quello che fa prima o dopo, ho 
mooooolto poco margine di manovra :(((

L'onload del body viene usato per eseguire script di resize della pagina.
Ora vedo di provare il tuo suggerimento dell'head.... speriamo bene!!
Grazie e a dopo
  P.

Nando ha scritto:

mi spiace volevo rispondere a .*. non a Nando, ma ho messo la risposta 
sotto il tuo post, con cui le mie parole non avevano niente a che fare. 
ciao :)

  P.
Ho potuto fare la prova subito e purtroppo il risultato č :
Initialize --> In progress E BASTA :'(
E come se la pagina non venga caricata, a meno di non far eseguire al 
plugin i 2 metodi del browser (refresh e release)
Per rispondere al tuo precendente post, non posso decidere dinamicamente 
se far eseguire quelle 2 istruzioni al plugin : o non si fanno (ma cosě 
non sono quando la pagina č stata caricata) o si fanno (e cosě mi devo 
gestire la doppia esecuzione degli script all'interno del body dovute al 
browser.refresh())
A meno di qualche colpo di genio, mi dovrň rassegnare....
Grazie a tutti!!
   P.

 
Hai ragione : per fortuna io ho virgolettato e indicato la fonte! ..ma 
comunque mi riferivo solo all'evento onload.. comunque visto che ci 
siete voi che avete chiarito... bene. ciao :)

 L'onload del body viene usato per eseguire script di resize della pagina.
Dipende molto dal tipo di pagina che hai, ma puoi provare a eseguire la
funzione di resize alla fine della pagina, invece che nell'onload.
-- 
~ "E' bello essere vivi. Ci sono tante cose che non si possono fare
da morti."

 A meno di qualche colpo di genio, mi dovrò rassegnare....
Eh, tranquillo, qui son di casa i colpi di genio.


 Eh, tranquillo, qui son di casa i colpi di genio.
ehehheh... in un'azienda ti richiedono i colpi di genio in fretta e se 
non vengono, si sceglie la soluzione + rapida e meno elegante, ma che 
risolve il problema!! Poi una volta che tutto funziona, e se resta 
tempo, si prova a farla meglio :D
Quindi se i tuoi ultimi suggerimenti non dovessero sortire gli effetti 
desiderati, dovrò andare avanti per la mia strada, facendo ripristinare 
i comandi per il "refresh" del browser!!
Grazie ancora
   P.

 L'html viene generato da una jsp 
Ma non era un plugin?
-- 
~ "Non ci si uccide per amore, basta aspettare."
"Allora non mi uccido per amore, mi uccido per impazienza." (A.O. e M.T.)

 Ma non era un plugin?
ARGH!
Io non ci sto capendo piů niente :-S


 Io non ci sto capendo piů niente :-S
Si, si sta decisamente lavorando alla cieca..
-- 
~ Neanche il futuro e' piu' quello di una volta.

 Ma non era un plugin?
Sicuramente non ho spiegato bene il flusso... scusate :)
Ci provo ora:
- da una pagina chiamo il plugin, che a sua volta chiama in get una jsp 
che produce il codice html che il plugin deve "scrivere" sul browser con 
le istruzioni che ho scritto prima.
Questo html viene "letto ed eseguito" dal browser senza però eseguire 
gli script che stanno dentro l'onload del body, a meno di non far fare 
al plugin un refresh() e poi un release() del browser; così facendo però 
il browser eseguirebbe 2 volte gli script che stanno dappertutto tranne 
che nell'onload del body.

 che nell'onload del body.
Non è chiara anche un'altra cosa: Il plugin "da dove" lo chiami? Nel senso.
Hai una pagina "madre", che apre una pagina "figlia" (popup) dove poi chiami
il plugin per fargli fare il get della pagina jsp? O cos'altro?
-- 
~ Ci si aspetta di tutto, ma non si e' mai preparati a nulla.
(M.Swetchine)

 il plugin per fargli fare il get della pagina jsp? O cos'altro?
1 - Pagina A contiene il tag object e uno script che esegue l'exec()
2 - Eseguito l'exec(), il plugin fa il get di una jsp che produce l'html
3 - il plugin scrive l'html ottenuto sul document con le istruzioni 
open, write e close
4 - ottengo a video una "pagina" con il risultato corretto, ma che non 
ha referrer (se provo a fare document.referrer mi da stringa vuota) e 
location.href è about:blank... inoltre l'onload non viene eseguito!!

 open, write e close
Sul document di quale window? Quella che contiene l'object oppure una
popup, una nuova finestra insomma?


 open, write e close
Queste istruzioni le fai te a mano? Ovvero, qual'è il codice della pagina A?
-- 
~ "Il debito pubblico è abbastanza grande da badare a sé stesso."
(Ronald Regan)

 Queste istruzioni le fai te a mano? Ovvero, qual'è il codice della pagina A?
Scusa, ZER0, dimmi una cosa... ipotizzando che 'sto plugin faccia una cosa
del tipo:
1) w=window.open()
2) w.document.write(html)
3) w.document.close()
l'evendo onload di w non viene scatenato dopo l'istruzione 1?
Se è così, è ovvio che non venga eseguita la funzione specificata nel
codice html che viene scritto in w, no?


 Queste istruzioni le fai te a mano? Ovvero, qual'è il codice della pagina A?
Scusa, ZER0, dimmi una cosa... ipotizzando che 'sto plugin faccia una cosa
del tipo:
1) w=window.open()
2) w.document.open()
3) w.document.write(html)
4) w.document.close()


 l'evendo onload di w non viene scatenato dopo l'istruzione 1?
E pare proprio di no... vabbuò, come non detto :)



Queste istruzioni le esegue il plugin; come, non ne ho la + pallida 
idea, visto che la società che lo distribuisce è stata disponibile solo 
a fornire (dopo mooooooolta insistenza) solo le ultime istruzioni 
(quelle che ho postato + volte)
Il codice della pagina A è una pagina semplicissima del tipo
<html>
   <body>
     <OBJECT id="Obj" name="PinoObj" classid="clsid:codicealfanumerico" 
codebase="urldelplugin">
       <PARAM NAME="param1" VALUE="1">
       <PARAM NAME="param2" VALUE="2">
       <PARAM NAME="url_su_cui_fare_la_get" 
VALUE="
http://www.ciccio.com/gino.jsp
">
     </OBJECT>
     <script>
	Obj.exec()
     </script>
   </body>
</html>
Dopodichè viene visualizzato il prodotto della pagina 
http://www.ciccio.com/gino.jsp
 con i risultati che sappiamo
Se vedo il location.href della pagina A, è quello che mi aspetto.
Se vedo il location.href della pagina successiva vedo about:blank
That's all!!

 That's all!!
Non mi hai ancora detto il nome del componente in questione.
-- 
~ Il tempo è quello che fai di lui.

 Non mi hai ancora detto il nome del componente in questione.
Non ti posso fare il nome dell'azienda, ma è un activex ed è fatto in 
linguaggi MS, vista la tecnologia usata dall'azienda!!

 Non ti posso fare il nome dell'azienda, 
Come mai?
E cmq dell'azienda frega assai poco, volevo solo capire il nome del
componente per vedere se riuscivo a trovare qualche informazione in merito.
Così è un po' difficile aiutarti, in quanto sto andando avanti alla cieca.
-- 
~ "FINARMENTE LI SFRATTATI AVRANNO UN TETTO SULLA TESTA!
...però tirato ammodino, un tegolo pe' vorta.." (Il vernacoliere)

 salvarla nella history; e poi faccia il document.write.
L'unica cosa che so con certezza è che le 3 istruzioni sono le ultime 
che il plugin esegue... prima farà un fottio di cose... ma non ci è dato 
saperlo!!
Cmq il tempo delle prove purtroppo è scaduto :(( e quindi alla fine ho 
optato per un controllo via cookie per evitare la doppia esecuzione dei js.
Appena avrò un po' di tempo, mi ci ributterò sopra per vedere un po' che 
succede con gli ultimi consigli che mi hai dato....
Veramente tante grazie per la tua rapidità nel rispondere... e 
complimenti per la tua competenza ;)
   P.