Domanda

Ho un'applicazione asp.net che funziona esclusivamente su IE7 (sito web interno).

Quando un utente deve inserire dati, viene visualizzata una finestra secondaria con un modulo.Quando il modulo si chiude, chiama javascript:window.opener.location.reload(true) in modo che i nuovi dati vengano visualizzati nella pagina principale.

Il problema è che il browser si lamenta di dover ripubblicare la pagina.C'è un modo per disattivare questa funzione?

È stato utile?

Soluzione

È perché la pagina in window.opener proviene da una richiesta post forse puoi usare javascript: window.opener.location = window.opener.location;per eseguire solo una richiesta GET se i dati possono essere recuperati senza un POST.

Altri suggerimenti

No, ma c'è una soluzione.È generalmente considerato una buona idea utilizzare un reindirizzamento 302 immediatamente dopo che qualcuno ha pubblicato dati su una pagina.Ciò impedisce che il popup si verifichi.Permettimi di approfondire.

1) L'utente compila un modulo e invia i dati tramite POST.

2) Il backend riceve i dati e agisce di conseguenza.

3) Invece di restituire il contenuto all'utente, il backend emette un reindirizzamento 302 non appena termina l'elaborazione della pagina (possibilmente reindirizzando l'utente allo stesso identico URL, se necessario)

4) La pagina che vedrà l'utente è la pagina a cui hai detto al suo browser di reindirizzare.Caricheranno la pagina reindirizzata con una richiesta GET standard.Se tentano di aggiornare la pagina, i dati non verranno ripubblicati.Problema risolto.

Questo è un problema con il consueto metodo "postback" di ASP.NET.Se è necessario ricaricare una pagina senza questo avviso, questa pagina deve provenire da un GET, non da un POST.Potresti eseguire tu stesso un Response.Redirect("...").Ma questo distruggerà l'uso di viewstate.

asp.net mvc risolve questo problema, non un problema solo di IE7 ma una funzionalità di sicurezza della maggior parte dei browser.Nessuna soluzione che io conosca, tranne che potresti semplicemente aggiornare il contenuto nel modulo principale con js anziché ricaricare l'intera pagina

Non credo che ci sia un modo per farlo.Invece, perché non indirizzare la finestra principale a una pagina senza ricaricare.

javascript:window.opener.location='il tuo URL'

Per quanto ne so, non tramite i tuoi script.

Potresti provare:

window.opener.location = '#';

Dovrebbe aggirare la ripubblicazione del browser.Inoltre, puoi modificare il nome hash secondo necessità.

Se ti sposti da pagina 1 a pagina 2 e desideri impedire al browser di tornare alla pagina 1, aggiungi quanto segue nella parte superiore di pagina 1.

<script>
if(window.history.forward(1) != null)
                 window.history.forward(1);
</script>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top