2009-02-16 21 views
19

ACTUALIZACIÓN: Un título alternativo para esto podría ser: ¿Cómo puedo llamar a Javascript desde mi aplicación Silverlight 2.0.¿Puede Silverlight iniciar actualizaciones de página?

Aquí hay una pregunta rápida para todos los gurús de Silverlight.

Tengo una aplicación Silverlight que muestra una cuenta regresiva del cronómetro. La aplicación está alojada en una aplicación web ASP.Net, Lo que quiero que haga es cuando el cronómetro llegue a cero, la aplicación obliga a una página de servidor a actualizar la página de alojamiento.

¿Esto es posible?

Si es así, ¿hay alguna posibilidad de un fragmento de código?

Respuesta

20

Apparently se le puede llamar un script JS de Silverlight usando

HtmlPage.Window.CreateInstance 

o

HtmlPage.Window.Invoke 

La JavaScript para refresh una página es

location.reload(true) 

No soy un Silverlight o Sin embargo, el experto en JavaScript no está seguro si funciona en todos los navegadores, o incluso en absoluto.

EDIT:

de Scott publicó un comentario a esta respuesta con su solución final.

Necesitaba crear una función de cliente de JavaScript en la página ASP.Net llamada reload() que realizaba location.reload (true). Entonces era una simple cuestión de su código C# para volver a cargar:

HtmlPage.Window.Invoke("reload"); 

Como @ sugirió R4cOON, también se puede utilizar:

System.Windows.Browser.HtmlPage.Document.Submit(); 
+1

HtmlPage.Window.Invoke ("location.reload (true);"); no funcionó para mí después de todo. Cuando descubra exactamente lo que hace, lo publicaré aquí. gracias de cualquier manera. –

+4

bien, esto fue el 90% del camino hasta allí. Todo lo que necesitaba era crear una función de cliente de JavaScript en la página ASP.Net en mi caso, llamada reload(), que realizaba location.reload (true). Entonces fue una simple cuestión de mi código C# tener esta línea: HtmlPage.Window.Invoke ("reload"); Gracias de nuevo. –

+0

nice one, actualizaré mi respuesta para incluir esta nueva información –

1

Es posible que una aplicación Silverlight invoque javascript en la página, lo que a su vez podría forzar la actualización de su página. ¡Así que sí, esto es definitivamente posible!

25

Por qué no simplemente permanecer en el lado Silverlight y llaman

System.Windows.Browser.HtmlPage.Document.Submit(); 

Trabaja para mí. Toda la página se vuelve a cargar y el control de Silverlight vuelve a activarse.

+0

Esto fue exactamente el tipo de cosa que estaba buscando. Lo veré pronto y +1 tu respuesta si funciona de la manera que esperaba. ¡Gracias! –

+0

Esto funciona bien localmente pero no funciona en el servidor. – ThePower

+1

¿Qué quieres decir? ¡Por supuesto que no funcionará en el servidor, Silverlight está en el lado del cliente! ¿Quiere decir que quiere reiniciar su servidor web desde el cliente? – R4cOON

2

En mi caso, no quería hacer el postback de asp.net y perder el contexto de mi página de Silverlight, así que actualicé mi página navegando hacia ella. De esa forma, los cambios de mi lenguaje que hice en mi barra de navegación se reflejaron en mi página o en la Vista, ya que vienen en la plantilla de 2008.

this.ContentFrame.Navigate (new Uri ("", UriKind.Relative));

En este caso estaba en mi página de inicio. "" significa la página de inicio si examina la solución de navegación con plantilla de Silverlight.

6

Simplemente una nota rápida sobre por qué HtmlPage.Window.Invoke("location.reload(true);"); no funciona: de mis pruebas rápidas parece que la forma en que Silverlight implementa Invoke es buscar una propiedad con el nombre dado en el objeto JavaScript especificado y llamarla. Entonces, este código diría: "Encontrar una propiedad en el objeto de la ventana llamada 'location.reload (true);' y llámalo con cero argumentos ". Existe, en cambio, un método GetProperty que le permitirá obtener la propiedad location de la ventana e invocar reload con el parámetro true. El código final es el siguiente:

((ScriptObject)HtmlPage.Window.GetProperty("location")).Invoke("reload", true);

+0

Esta es una buena opción si la página HTML del host no contiene un elemento de formulario que se pueda enviar. –

Cuestiones relacionadas