2010-08-11 11 views
11

Quiero determinar cómo filtrar F5, botón de actualización, X y cerrar en el navegador a través de silverlight 4.0 o incluso en el lado del servidor.Silverlight 4: detectar navegador F5/actualizar y X/cerrar

gracias

Editado:

añadí recompensa a mi pregunta solo hoy, 28 de julio de 2011. Mi anterior solución/respuesta ya no está trabajando en IE 9.

window.onunload = function (e) { 
    // Firefox || IE 
    e = e || window.event; 
    var y = e.pageY || e.clientY; 

    if (y < 0) { 
     alert("close"); 
    } 
    else { 
     alert("refresh"); 
    } 
} 

Cuando el usuario presiona F5, actualizar, X y cierra el botón, NO debería aparecer el cuadro de mensaje. En caso de que la solución esté antes de descargar.

Gracias por su ayuda!

+0

filtro Cómo - interceptarlo y evitar que el usuario lo hace? Dudo que eso sea posible. – Rup

+0

Solo quiero saber cómo, no para evitar, sino para volver a cargar el servicio web. – xscape

+0

¿A qué te refieres con volver a cargar el servicio web? Si el servicio web está en algún estado no predeterminado, agregue alguna variable de estado, esa aplicación se configurará al inicio y, por lo tanto, cada reinicio reiniciará esta variable y obtendrá un evento de ella. – Zee

Respuesta

2

ya que no es posible en el lado del cliente, lo hice en el servidor lado.

resuelvo mi problema con este código:

window.onunload = function (e) { 
     // Firefox || IE 
     e = e || window.event; 
     var y = e.pageY || e.clientY; 

     if (y < 0) { 
      alert("close"); 
     } 
     else { 
      alert("refresh"); 
     } 
    } 
+0

¿Cómo funciona esto? –

0

No hay ninguna propiedad para verificar si su aplicación está cargada presionando el botón F5, pero podría manejar el evento de inicio de la aplicación y establecer una variable con fecha y hora. En el momento en que su página se carga, puede verificar si el intervalo de tiempo es solo un par de segundos atrás. Entonces, ahora sabe que la aplicación se carga la primera vez o que se presiona el botón F5 cuando es solo hace un par de segundos. No sé si esto es suficiente para usted, pero usted puede darle una oportunidad:

App.xaml.cs

public class App : Application 
{ 
private DateTime appStartupTime {get; set}; 
public App() 
{ 
    Startup += new EventHandler(Application_Startup); 
} 

void Application_Startup(object sender, StartupEventArgs e) 
{ 
    //initialize the startupTime 
    appStartupTime = DateTime.Now; 
} 
public bool IsApplicationReLoaded 
{ 
    get 
    { 
    //return true if your app is started less 10 seconds ago 
    return DateTime.Now.AddSeconds(-10) < appStartupTime; 
    } 
    } 
} 

ya se puede empezar a utilizar el código de abajo de todas partes

(Application.Current as App).IsApplicationReloaded 
2

No es posible que el lado del cliente determine si el inicio de una aplicación es el resultado de una operación de actualización realizada por el usuario.

Sin embargo, puede determinar en el servidor que se está actualizando una página. Puede agregar la siguiente propiedad al código subyacente de la página ASPX que aloja la aplicación Silverlight.

public bool IsRefresh 
{ 
    get { Request.Headers["pragma"] ?? "").Contains("no-cache"); } 
} 

Ahora utiliza esta propiedad para incluir condicionalmente un valor en el plugin Silverlight initParams.

<object ...> 
    <param name="initParams" value="IsRefresh=<%=IsRefresh.ToString()%>" /> 
</object> 

Luego, en código de Silverlight se puede determinar si la aplicación se ha cargado como resultado de una actualización con: -

if (Application.Current.Host.InitParams["IsRefresh"] == "True") 
+0

* Request.Headers ["Accept-Encoding"] * Request.Headers ["Accept-Charset"] * Request.Headers ["Accept-Language"] * Request.Headers ["Accept"] Todos estos 4, cuando Presiono F5, IsRefresh sigue siendo False, ¿extrañé algo? – xscape

+0

Incluso si lo cambio a esto, Request.Headers ["pragma"]. Contiene ("no-cache"); O (Request.Headers ["pragma"] ?? "") .Contains ("no-cache"); Este es el error: Referencia de objeto no establecida en una instancia de un objeto – xscape

Cuestiones relacionadas