mercoledì 13 marzo 2013

showModalDialog problemi con IE 8

Ho verificato il seguente tipo di problema utilizzando lo showModalDialog soltanto con IE8, mentre tutto funzionava correttamente con Firefox e Chrome.
Il requisito era di aprire in modale una finestra e consentire al suo interno la navigazione mantenendo inibita la possibilità di cliccare sulla finestra padre.
Il problema che si verificava era che al primo click all'interno della finestra modale, invece di proseguire la navigazione normalmente, veniva aperta una nuova finestra , su cui poi si navigava correttamente.
C'era quindi la seguente situazione:
  1. Finestra di partenza, da cui si apre con showModalDialog l'applicazione che si vuole visualizzare in modale;
  2. Finestra dell'applicazione iniziale, sulla quale  clicco per navigare;
  3. Finestra aperta dall'interno della finestra modale.
Insomma  una situazione molto strana ed anomala nonchè, ripeto, esistente soltanto su Internet Explorer.
Navigando su internet ho trovato questo interessante articolo in merito che mi ha aiutato a risolvere il problema: http://jwcooney.com/2011/12/22/showmodaldialog-opens-a-new-window-on-submit-or-location-href/  .

Sintetizzando ci sono due strade da seguire:

  1. Nella pagina che si apre in modale inserire all'interno del tag head il seguente tag: <base target="_self" /> ;
  2. Effettuare il submit del form aperto in maniera modale via javascript utilizzando un tag anchor hidden nel form (<a href=”" id=”goLocation” style=”display:none;”> ).
Con il primo modo non mi ha funzionato, con il secondo invece si.
Quindi via javascript bisogna chiamare un metodo che imposti la proprietà href con l'action desiderata e quindi effettui il click.
Una cosa del tipo:

document.getElementById('goLocation').href = 'myAction.do?par1=x&par2=y';
document.getElementById('goLocation').click();

Si noti come  è necessario passare i parametri desiderati in querystring, per cui nel caso di form con molti campi ci sarà un lavoro pesante di javascript per settare i parametri corretti.

La mia paura a questo punto è stata quella di dover sostituire alla modalità standard di post del form sempre questa via tag anchor e javascript ma non è stato necessario, è bastato fare questa modifica solo nella pagina su cui si apre la finestra in modale, per il resto è rimasto tutto tale e quale.

Nessun commento:

Posta un commento