Newsgroup: it.comp.lang.javascript
Titolo: Problema con iframe e getElementById

La situazione è questa: ho due pagine: A e B.
La pagina A è caricata all'interno di un iframe e contiene un form che apre 
in una finestra separata con window.open la pagina B.
La pagina A contiene un form cosi definito (nella forma più semplice):
              <form action="b.php" id="mioid" method="post" 
target="miotarget" onsubmit="return false;">
                      <input type="submit" name="join" value="miovalore" 
onclick="window.open(this.form.action, this.form.target, 
'width=708,height=531,resizable=no,directories=no,menubar=no',''); return 
false;"/>
              </form>
Mentre la pagina B contiene quanto segue:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
" xml:lang="it" lang="it">
  <head>
      <title> Caricamento in corso... Attendere prego!</title>
      <script type="text/javascript">
        <!-- 
          window.onload = function(){
             opener.document.getElementById('mioid').submit();
           }
        //-->
      </script>
  </head>
</html>
Ora il problema è questo. Se carico la prima volta la pagina A e clicco sul 
relativo button del form si apre la pagina B all'interno di una finestra 
separata e vengono caricati i valori passati tramite window.onload il tutto 
senza problemi.
Mantenendo aperta la finestra separata e facendo un refresh della pagina A e 
quindi cliccando nuovamente sul button del form, nella pagina B caricata 
dentro la finestra separata si verifica un errore.
I dati dell'errore ottenuto tramite IE7 sono:
Linea: 12
Carattere: 14
Errore: Autorizzazione negata
Url: (l'indirizzo caricato)
Andando alla ricerca dell'errore tramite la console degli errori di firefox, 
nei warning viene restituito il seguente messaggio:
    "Una stringa vuota è stata passata a getElementById"
Ora ho scoperto che il problema è causato dall'iframe dove vado a caricare 
la pagina A,.
Infatti, caricando la pagina A direttamente senza ricorrere quindi 
all'iframe, tutto funziona correttamente e non viene restituito nessun tipo 
di errore o warning.
Ora come posso risolvere questo problema? se c'è una soluzione alternativa 
all'iframe ben venga; l'importante che le caratteristiche tipiche 
dell'iframe rimangano le stesse; diversamente come dovrei rimediare?
Grazie ancora per il vostro aiuto
Cooper.
 

 Ora come posso risolvere questo problema? 
Verificando che l'opener esista ancora?
  (del tipo:
   if(opener && !opener.closed)
    tuariga;
   else {
    alert("Non esiste piů l'opener, che vuoi da me???");
    window.close();
  }
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

  }
Ho corretto tenendo conto del codice che mi hai suggerito ma la parte 
relativa all'else non viene eseguita; e l'errore di cui ti accennavo prima 
rimane identico.
Ovviamente al posto di tuariga ho messo:
     opener.document.getElementById('mioid').submit();
Ma non è stato risolto nulla.
Qualche altro consiglio/suggerimento?
Grazie ancora,
Cooper.
PS: Non c'è modo di recuperare "mioid" ?
 

 rimane identico.
allora non saprei che dire: se opener esiste, non risulta chiuso, dici che
la prima volta funziona (e quindi escludiamo problemi di SOP, di ID
multipli o quant'altro) ... non saprei cos'altro suggerirti.



Capisco :(
Io so solo che il problema dipende dall'iframe; in ogni caso ho fatto alcune 
prove di testing mettendo anche un alert sulla prima parte dell'if (quella 
che precede else) e praticamente non viene eseguita neanche quella; in altre 
parole il blocco IF la seconda volta non viene eseguito.
Questo lascia pensare che l'errore sia genarato prima del blocco if.
Però prima del blocco if c'è solo l'istruzione:
             window.onload = function(){
E' possibile in qualche modo intervenire su questa riga per rimediare?
Grazie ancora,
Cooper.
 

 Cooper.
Nel caso che il form non abbia un input tipo file.
iframe è necessario? Non puoi usare un div?


Non sono un'esperto di javascript se si puň usare un div, ben venga... il 
problema perň č che devo caricare il contenuto di una intera pagina html 
(quindi con una propria intestazione e corpo) all'interno di un area.
Se questo si puň fare anche con un div, senza influenzare negativamente il 
funzionamento della pagina che ospita... allora sarebbe ottimo; altrimenti 
l'unica alternativa rimarrebbe solo il iframe :(.
Cooper.
 

 Cooper.
Si <input type="file"> dato che non lo hai non ci sono problemi per
l'uso del div, altrimenti non potresti usarlo.
Al fine di risparmiare tempo, ti consiglio di usare jquery, lo
scarichi da jquery,com
jquery è un file .js che inserisci facilmente nella pagina:
<script type="text/javascript" charset="UTF-8" src="js/jquery.js"></
script>
Una volta inserito puoi usare la funzione load per inserire spezzoni
di codice html provenienti da un file esterno.
Uso il termine spezzone perché il file esterno non è altro che una
pagina html ma senza il blocco <head></head>, e tutto il suo
contenuto, ed anche senza il tag <body> all'inizio e </body> alla
fine, ma ovviamente con tutto il suo contenuto.
puoi usare load nel modo seguente:
$('#id_del_div_che_vuoi').load
(pagina_esterna_con_lo_spezzone.html,funzione da accendere dopo che il
div è caricato);
tipicamente la funzione è usata per spegnere una gif animata che ti
dice "attendere prego"
Se non ci riesci passami il tutto che lo faccio io. Se poi il tutto
funziona diventerai jquery-dipendente come me e molti altri.
Ciao


E' molto interessante quello che mi hai accennato e sono certo che 
approfondirò ulteriormente l'argomento; tuttavia hai anche detto, se ho 
capito bene per usare i div, nella pagina html che si vuole caricare non 
deve esserci la sezione head.
Ora la mia pagina html prevede un head dove al suo interno è contenuto un 
foglio di stile.
Questo rappresenta un problema? E in caso come si potrebbe ovviare? Si 
dovrebbe mettere il css nel body ma non mi sembra che sia una buona idea 
(non è conforme agli standard) e il css a sua volta richiama delle 
immagini...
Rimane sempre fattibile la cosa con queste premesse?
Grazie ancora per il tuo aiuto
Cooper.
 

 ha scritto nel messaggionews:985851a8-5496-46b8...@v39g2000pro.googlegroups.com...

Il foglio di stile si riferisce ad elementi probabilmente specifici
alla pagina, questi elemento possono essere inclusi nel foglio di
stile della pagina ospitante, nel caso vi fossero delle ambiguità,
occorre risolverle evitando che vi siano doppioni negli id, class o
altro. Un esempio dell'uso della funzione load puoi osservarlo
all'indirizzo:
http://idvestero.org
 le tre chiamate da menu "Atrio Tesseramento
Gruppi" usano la funzione load.


Esatto, si riferiscono agli elementi della pagina, di solito in situazioni 
del genere è consuetudine per me chiamare le class o gli id usando nomi 
tipo: .nomedominio_nomeclass oppure #nomedominio_nomeid.
Con questa premessa allora è possibile utilizzare il div anche se la pagina 
contiene la dichiarazione css all'interno dell'head?
Riguardo all'esempio che mi hai citato... dovrei richiamare prima il file 
jquery.js:
    <script type="text/javascript" charset="UTF-8" 
src="js/jquery.js"></script>
Trovandomi però all'interno di un file .js come posso scrivere? Ricordo che 
c'era l'istruzione include o qualcosa del genere ma non sino sicuro, mi puoi 
dare ulteriori lumi?
Ciò premesso, dovrei definire il div:
    <div id="mioid"></div>
A questo punto però mi sono bloccato, perchè la funzione load che carica il 
contenuto nel div non la trovo :( Dove si trova più precisamente?
Grazie mille per il tuo aiuto.
Cooper. 


Risolto, ho trovato nel file index.js.
Però per avendo bene o male compreso il codice javascript, mi sento un po' 
confuso; perché nel caso specifico vengono effettuate diverse chiamate fra 
cui una che mostra una barra di avanzamento etc.
Potresti quindi illustrarmi semplicemente la riga di codice che dovrebbe 
caricare la pagina html, che dovrei inserire sempre all'interno del mio file 
js?
Dimenticavo la pagina non ha estensione .html, ma php e passa dei parametri 
tramite url; qualcosa del tipo:  miapagina.php?a=1&b=2&c=3 etc etc.  Cambia 
qualcosa?
Ho visto il modo in cui viene caricata, tuttavia andando a guardare 
all'interno della pagina atrio.html a titolo di esempio ho notato che essa è 
priva di ogni definizione.
Io invece mi ritrovo con qualcosa del tipo:
<html ......... >
    <head>
       <style ......... >
            // Foglio di Stile
       </style>
    </head>
    <body ........... >
           // Contenuto che contiene tag come form, table etc.
    </body>
</html>
Questo complica le cose oppure no?
Grazie ancora,
Cooper.
 

 miapagina.php?a=1&b=2&c=3
va benissimo, ma questa potrebbe essere una chiamata XMLHttpRequest, a
questo punto puoi usare la funzione
$.ajax({ opzioni });
che vedi nel file index.js
var dati = 'tuonome='+$('#tuonome').val()+'&tuoemail='+$
('#tuoemail').val()+'&tuomessaggio='+$('#tuomessaggio').val()
+'&captcha='+$('#captcha').val();
$.ajax({
url: "cgi-bin/
email.pl
",
data: dati,
beforeSend: function(){$('#attendi').show();},
success: function(a,b){
                        $('#struttura_2').html(a);
                        $('#attendi').hide();
                      },
error: function(a,b,c){
                        $('#struttura_2').html(
                                                '<p><b>Si è verificato
un errore, si prega di riprovare più tardi</b></p>'+
                                                '<p>a = '+a+'</p>'+
                                                '<p>b = '+b+'</p>'+
                                                '<p>c = '+c+'</p>'
                                              );
                        $('#attendi').hide();
                      }
});
Il form di invio messaggio si basa sul codice precedente chiamando uno
script Perl, puoi provarlo semplicemente premendo il bottone di invio,
tutti i messaggi che poi vengono visualizzati nel riquadro provengono
dallo script
La funzione load prevede come secondo parametro una funzione che viene
chiamata dopo la riuscita del load, ma tale funzione non è
obbligatoria, puoi usare load nel modo seguente:
$('ilmiodiv').load(lamiapagina);
tout court
Se vuoi dare un'occhiata alle funzioni jquery puoi farlo al seguente
indirizzo:
http://jquery.bassistance.de/api-browser/
dove puoi osservare uno degli esempi della funzione load
$("#feeds").load("feeds.html");
HTML:
<div id="feeds"></div>
Result:
<div id="feeds"><b>45</b> feeds found.</div>

Il Tue, 27 Jan 2009 05:43:52 -0800 (PST), Oreste ha scritto:
[CUT]
Scusate se mi intrometto: se il problema avviene quando preme F5 sulla
pagina (ossia perde l'opener), cosa centra tutto 'sto macello con ajax per
togliere l'iframe? Non capisco come possa risolvere ... E se, come penso,
non risolve: non conviene prima trovare una soluzione e poi incasinare
tutto il codice, anziché l'opposto?
-- 
"Non sai che ci vuol scienza
 ci vuol costanza
 ad invecchiare senza maturità"
									    F.G.


La tua spiegazione è stata abbastanza chiara e non mi resta che metterla in 
pratica, c'è solo un problema però, il css non posso separarlo dal form che 
è parte integrante della stessa pagina :(
Grazie mille :)
Cooper. 


Aspetta, io non premo f5; come dicevo all'inizio, c'è un form nella pagina A 
con un button che apre una finestra indipendente (contenuto pagina B) dove i 
parametri vengono caricati tramite opener.
Lasciando la finestra indipendente aperta, e facendo il refresh della pagina 
A e quindi premendo il button del form nuovamente, la pagina B viene 
ricaricata nella stessa finestra precendentemente aperta, con l'unica 
differenza che questa volta restituisce l'errore: Autorizzazione negata.
Questo problema si presenta solo in IE con firefox invece tutto funziona 
alla grande; firefox non rileva errori, ma appena un warning in cui dice che 
a getElementById è passata una stringa vuota.
Ora il problema si verifica SOLTANTO nel caso in cui la pagina A viene 
caricata all'interno di un IFRAME, se invece la pagina A viene caricata 
fuori dall'IFRAME, tutto funziona alla grande sia su IE che su FF.
Purtroppo per motivi tecnici la pagina A deve essere caricata all'interno di 
un area che può essere un IFRAME, oppure come sto vedendo anche un DIV.
A me quello che mi interessa è risolvere il problema che si presenta in IE 
perchè su FF tutto funziona a meraviglia; anche quando la pagina A è 
all'interno di un iframe.
A me viene da pensare a un bug di IE, e vorrei appunto trovare la soluzione 
per "patchare" (o forse il termine più giusto è: hack, non so) questo bug...
Cooper.
 

 fuori dall'IFRAME, tutto funziona alla grande sia su IE che su FF.
stranissimo: da quel che ricordo (ma non ho mai giocato con questa
tematica) se fai un refresh perdi *sempre* l'opener, non solo "l'opener se
è dentro un frame" (ma, appunto, vado a memoria e potrei sbagliarmi).
Se così è potresti provare a salvarti il frame "principale", del tipo:
 onload:
   tuawin=opener.top;
e poi per riferirti all'iframe (visto che, se ho ben capito, riferendoti al
principale non dà problemi), userai anziché opener,
tuawin.frames['nametuoframe']
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
									B.M.

 Cooper.
Non è un problema, il form può avere una sua id oppure basta solo il
tag form per includere nella pagina chiamante tutte le definizioni css
che riguardano solo il form. Se mi invii il tutto, magari in pvt per
non appesantire il post, provo a risolverlo.


In questo modo, perň la pagina caricata normalmente continuerŕ a funzionare? 
Cioč io devo fare in modo che la sorgente (PAGINA A) sia completamente 
svincolata dalla PAGINA B (caricata nella finestra indipendente).
In altre parole la sorgente: PAGINA A, in alcuni casi č contenuta dentro un 
iframe, in altri casi invece no; devo qui adottare una soluzione che vada 
bene per entrambe le situazioni.
Purtroppo non posso pensare di escludere l'eventualitŕ refresh, perchč serve 
per altre ragioni, ma al tempo stesso perchč potrebbe essere effettuato 
manualmente dall'utente stesso...
Se hai la possibilitŕ dai una lettura al thread: "Problema con window.open 
(importante)" con particolare riferimento al post di ZER0 del 20/12/2008 ORE 
21.21.
Diciamo che le due cose sono collegate fra loro.
Grazie ancora per la pazienza
Cooper.
 

 bene per entrambe le situazioni.
non vedo problemi, immagino che opener.top, in assenza di frame,
restituisca opener ...
-- 
"Run rabbit run
 dig that hole, forget the sun
 and when at last the work is done
 don't sit down, it's time to dig another one"
									    P.F.

 ha scritto nel messaggio 
news:fcec3cd2-b5e5-4dea...@i24g2000prf.googlegroups.com...

Facciamo un breve riepilogo, la paginaA.php è cosi composta (ho eliminato il 
superfluo riducendola al minimo indispensabile, per superfluo intendo righe 
di commento, altri parametri input dello stesso tipo etc etc) e ho 
sostituito i valori con i puntini perchè quelli non credo siano rilevanti ai 
fini nostri, quindi abbiamo per la paginaA,php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
" xml:lang="it" lang="it">
  <head>
      <meta http-equiv="Content-Type" content="text/html; 
charset=iso-8859-1" />
      <meta http-equiv="Content-Language" content="it" />
      <meta http-equiv="refresh" content="3600" />
      <style type="text/css" media="screen">
        @import url(style.css);
        .xxx_pwc01 { ... }
        .xxx_pwc02 { ... }
        .xxx_pwc03 { ... }
      </style>
  </head>
  <body .... ">
    <div class="xxx_pwc01">
      <form action="paginaB.php" id="mioid" method="post" target="miotarget" 
onsubmit="return false;">
        <input class="xxx_pwc02" id="...." maxlength="...." name="...." 
size="...." type="text" value="...." />
        <input class="xxx_pwc03" type="submit" name="...." value="...." 
onclick="window.open(this.form.action, this.form.target, 
'width=708,height=531,resizable=no,directories=no,menubar=no',''); return 
false;"/>
        <input type="hidden" name="id" value="....." />
      </form>
    </div>
  </body>
</html>
Mentre paginaB.php è cosi composta:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
" xml:lang="it" lang="it">
  <head>
    <!-- BEGIN Titolo Pagina -->
      <title> Caricamento in corso... Attendere prego!</title>
    <!-- END Titolo Pagina -->
    <!-- BEGIN Javascript -->
      <script type="text/javascript">
        <!-- 
          window.onload = function(){
            if (opener && !opener.closed) {
               opener.document.getElementById('mioid').submit();
             } else {
               window.close();
             }
           }
        //-->
      </script>
    <!-- END Javascript -->
  </head>
  <body>
  </body>
</html>
Naturalmente vale quello che ho detto nel post precedente e cioè:
a) Per firefox nessun problema; solo un warning quando ricarico paginaA.php 
e clicco sul button in cui dice che getElementById contiene una stringa 
vuota; questo indipendentemente dal fatto che paginaA.php sia all'interno di 
un iframe che all'esterno di un iframe.
b) Per internet explorer (ho provato sulla versione 7) al primo caricamento 
di paginaA.php tutto funziona regolarmente; si apre la finestra e carica 
paginaB.php con  i suoi valori passati correttamente; lasciando aperta la 
finestra ed effettuando un refresh di paginaA.php e cliccando sul button del 
form la finestra rimane aperta ma viene restituito un errore: Autorizzazione 
Negata.
Facendo i test ho scoperto che il blocco condizionale:
            if (opener && !opener.closed) {
               alert ('sono true');
             } else {
               alert ('sono false');
             }
Non viene eseguito in nessun caso, quindi ho dedotto che l'errore non sta 
all'interno del blocco condizionale ma all'esterno; un errore insomma che 
interrompe in internet explorer la normale esecuzione dello script.
L'unica cosa che c'è prima (e dopo) il blocco condizionale è questo:
          window.onload = function(){
              // blocco condizionale (vedi sopra)
           }
Quindi io credo che la soluzione sia da ricercare nella riga:
          window.onload = function(){
Non pensi anche tu? Io ho provato a ragionare per esclusione e sono giunto a 
questa conclusione. Tu concordi?
Quindi prima di imbatterci nella soluzione tramite jquery che sicuramente è 
piu interessante, come giustamente diceva Cristiano, possiamo tentare di 
trovare una soluzione riguardo a questa istruzione? Cercando di capire 
perchè viene generato quell'errore? (che ripeto si verifica solo su IE 
(soltanto se paginaA.php è dentro un iframe) mentre su firefox tutto 
funziona alla grande indipendentemente dal fatto che paginaA.php sia interna 
o meno in un iframe.
Grazie ancora.
Cooper.
 

 Diciamo che le due cose sono collegate fra loro.
Uh, e` tutta colpa mia allora..! :D
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."


Allora faremo cosi :)
Il problema è proprio questo però, che esso si verifica solo se la pagina è 
dentro l'iframe, in tutti gli altri casi invece il problema non si presenta.
Cooper.
 

 ha scritto nel messaggionews:497F8AE3...@ID-171124.news.individual.net...

Giusto per curiosità, quella che uccide, dai un'occhiata al seguente
indirizzo:
http://oreste.parlatano.org/prove/prova_ajax_01/index.html
e dimmi se è ciò che intendi fare.

 pagina è dentro l'iframe,
Non e` affatto strano.. L'iframe del resto e` una window dentro
una window. E non e` il primo comportamento "particolare" noto,
per quanto riguarda "window dentro window" che aprono popup (in
cui poi viene fatto un refresh / cambio location della opener).
Ce n'e` uno molto simpatico circa i setTimeout su FF: smettono,
semplicemente, di "funzionare".
Anche in quel caso, il workaround e` stato agire sulla finestra
principale (far aprire ad essa la popup); non senza aver aperto
un bell'issue su bugzilla. :)


 ha scritto nel messaggio 
news:0e06e8ae-3dcb-4bd6...@b38g2000prf.googlegroups.com...

Non proprio, perchè il form si troverebbe in una pagina caricata all'interno 
di un iframe.
Hai presente google adsense?  Per inserirlo su una pagina google ti fornisce 
del codice compreso fra <script> </script> con dei parametri e il richiamo a 
una pagina javascript.
Nella pagina javascript io faccio le prime elaborazioni del caso quindi 
genero con un document.write un iframe e all'interno di questo iframe vado a 
caricare paginaA.php che contiene il form.
Il form contiene un button dove va al suo click, non effettua il submit, ma 
apre una finestra indipendente con window.open e all'interno di questa 
finestra indipendente carica paginaB.php.
Quest'ultima: paginaB.php effettua il submit tramite opener; e quindi va a 
inserire all'interno della finestra indipendente la pagina che avrebbe 
dovuto richiamare il form tramite action.
Perchè tutto questo?
Il motivo è semplice: ho voluto fare in modo che il contenuto fosse passato 
sempre alla finestra indipendente; e talvolta senza ricorrere a questo 
artificio succedeva che per qualche ritardo o meno, il contenuto non sempre 
era correttamente passato alla finestra indipendente ma qualche volta si 
andava a caricare nella finestra principale del browser lasciando cosi la 
finestra indipendente vuota.
La discussione su questo artifizio suggeritami da Cristiano e ZER0 si trova 
in questo newsgroup e il thread è intitolato:  "Problema con window.open 
(importante)" del 18/12/2008 e seguenti.
Poi quello che ho già detto: indipendentemente dalla presenza dell'iframe o 
no; su firefox funziona tutto correttamente sia prima che dopo il refresh; 
mentre su internet explorer funziona correttamente prima del refresh e poi 
si "impalla" dopo il refresh.
Grazie ancora per la pazienza.
Cooper. 


hihihi :)))))
Cmq grazie ancora :)
Cooper. 


Ho provato lo script che mi hai dato:
window.onload = function(){
var win = opener.frames[0],
doc = win && win.document,
frm = doc && doc.getElementById("mioid");
if (frm || (frm = opener.document.getElementById("mio") )
frm.submit();
else
alert("Chi si e` ciulato la form? Eh? EH?");
}
non restituisce errori sintattici, però in questo modo non funziona 
completamente; vale a dire che se la prima volta i dati del submit venivano 
passati correttamente e la seconda volta no, adesso non vengono passati 
completamente ne la prima volta ne la seconda e neanche quando paginaA.php è 
fuori dall'iframe.
Naturalmente al posto di mio e mioid ho messo l'id del form; ma il risultato 
non cambia :(
 


Prendendo come spunto la logica del tuo script, avevo pensato di passare 
tramite il form alla paginaA.php un parametro, qualcosa tipo: 
paginaA.php?id=0; però in tal modo come faccio tramite js a ricavare il 
valore di id dall'url?
Quindi procedere in questo modo:
    X = (valore id di paginaA.php?id=0)
    if (X == "") {
           window.onload = function(){
                 opener.document.getElementById('mioid').submit();
             };
      } else {
           window.onload = function(){
                 opener.frames[0].getElementById('mioid').submit();
             };
     }
Però come dicevo in un post precedente, l'errore viene rilevato in 
window.onload  quindi non so se cosi verrebbe risolto oppure no; in ogni 
caso, la riga:
                 opener.frames[0].getElementById('mioid').submit();
è corretta?
Per ottenere il valore id passato tramite get da paginaA.php?id=0 come 
dovrei scrivere la riga:    X = ???
Grazie ancora,
Cooper.
 


ho provato a scrivere:
 window.onload = function(){ \n";
          tuawin=opener.top;
         tuawin.frames['idframe'].document.getElementById('idform').submit();\n";
   }
Però l'errore rimane anche in questo caso dopo il refresh :(
 

Dimenticavo, considerando che l'errore è generato alla riga:
             window.onload = function(){
in javascript esiste un gestore degli errori?
La mia idea sarebbe quella di far chiudere la finestra nel caso appunto 
venisse rilevato l'errore, qualcosa tipo:
      esegui:
           window.onload = function(){
                  opener.document.getElementById('mioid').submit();
              };
      se rilevato errore esegui:
            window.close();
in questo modo lo script non si bloccherebbe restituendo il messaggio di 
errore ma semplicemente al rilevamento dell'errore chiuderebbe la finestra 
aperta.
In questo modo potrei giocare sul fatto che se la finestra è chiusa ed 
esegui il refresh tutto ritorna a funzionare nuovamente, quindi l'utente 
finale istintivamente sarebbe indotto a premere nuovamente il pulsante del 
form... e allora si vedrebbe tutto funzionare nuovamente.
Cooper.
 

 dovrei scrivere la riga:    X = ???
recuperi la querystring con location.search.substr(1):
 
https://developer.mozilla.org/en/DOM/window.location
Esegui uno split per "&":
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/split
e, per ogni valore dell'array, esegui uno split per "="
p.s. se è un valore solo forse fai prima a passare ?tuoid , così ti basta
leggere search e rimuovere il ?
-- 
"qualcuno è andato per età
 qualcuno perchè già dottore
 e insegue una maturità, si è sposato, fa carriera
 ed è una morte un po' peggiore"
									    F.G.

 in javascript esiste un gestore degli errori?
certo; attenzione solo a testarlo con vari browser e versioni.
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Exception_Handling_Statements/try...catch_Statement
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.


Ottimo, ho provato a scrivere in questo modo:
             try {
                window.onload = function(){
                   opener.document.getElementById('mioid').submit();
                  }
              }
            catch (e) {
               window.close();
              }
solo che la finestra al refresh non si chiude e l'errore che mi viene 
restituito è sempre lo stesso: autorizzazione negata.
Ho sbagliato qualcosa?
 

 Ho sbagliato qualcosa?
sì: nel try-catch stai mettendo la *dichiarazione* dell'onload ... se
l'errore avviene quando viene *scatenato* l'onload il try-catch è fuori
causa => devi metterlo nella function eseguita onload.



Dunque in questo modo:
window.onload = function(){
           try {
                opener.document.getElementById('mioid').submit();
                 }
      catch (e) {
             window.close();
          }
         }
Ho provato e funziona alla grande. Evvai!!!
Mi posso accontentare di questa alternativa; del resto č sempre meglio di 
avere una finestra aperta e vuota con l'errore.
Un ultima cosa, mi accennavi di fare attenzione ai vari browser, hai scritto 
infatti: "certo; attenzione solo a testarlo con vari browser e versioni." 
posso chiederti in che senso? Puoi fornirmi maggiori dettagli?
Ci sono casi in cui il gestore degli errori non funziona?
Grazie a tutti voi :) finalmente un passo avanti č stato fatto.
Cooper.
 

 Ci sono casi in cui il gestore degli errori non funziona?
con IE č stato introdotto nella 5.0 se non ricordo male.
Per altri browser devi fare qualche test.
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.


Allora non è un problema nel mio caso; perchè io avviso l'utente di 
assicurarsi che il suo browser in uso sia l'ultima versione disponibile per 
assicurarsi di non andare incontro a problemi di carattere funzionale del 
sito oppure a problemi di sicurezza per il suo pc :)
In questo modo chi usa browser datati e vede che qualcosa non va, almeno sa 
qual'è il motivo e ha uno stimolo in più ad aggiornarlo altrimenti 
s'accontenta della finestra bianca con l'errore :)
Infondo è anche nel loro interesse aggiornare il software che usano nel loro 
pc per motivi di sicurezza informatica; quindi.. :)
L'importante che non vi sono problemi per le versioni più recenti dei 
browser.
Cooper. 

 sito oppure a problemi di sicurezza per il suo pc :)
Se mi permetti, considero l'atteggiamento (in generale) errato ...
quantomeno perché io ho win2000, e quindi IE7 non posso installarlo. Dalle
statistiche di un sito che curo [e che ha una quantità industriale di
accessi giornalieri], inoltre, purtroppo c'è ancora parecchia gente che usa
IE5 per Mac (e anche qua non può installare nulla di più recente).



Condivido pienamente il tuo punto di vista, (se penso infatti che alcune 
banche usano ancora un 486 con win98... mi viene il brivido), per questo ho 
detto "nel mio caso"; perchè per l'utenza a cui mi rivolgo (nel caso 
specifico) il problema non sussiste; se vogliono usufruire del servizio 
(gratuito fra l'altro) devono adeguarsi, che poi è anche nel loro medesimo 
interesse (in termini di sicurezza); quindi un motivo in più per loro.
Questo da un lato; dall'altro lato, le percentuali di utenze che usano 
browser datati (secondo le statistiche rilevate sul sito mio in questione) 
sono al di sotto dello 0.5% (indipendentemente dal fatto che sia IE, FF, o 
altri). quindi una percentuale alquanto irrilevante.
 

 Cooper.


 completamente;
E guarda se restituisce errori "non sintattici" :) Ergo, l'error console
di Firefox. Ricordati che lo script d'esempio da per "assunto" che se vi
e` il frame con la form, questo e` il primo.
Se vuoi fare un debug (sempre su FF), puoi banalmente stampare i singoli
valori delle variabili e vedere che succede.
Fintanto che non ci metti il tuo codice online, non posso neanche provar
a vedere come mai non ti va.
