c# windows-phone-8.1 webbrowser-control

c# - El control WebBrowser no activa controladores de eventos



windows-phone-8.1 webbrowser-control (1)

Dave,

El control WebBrowser está diseñado para trabajar directamente en subprocesos de UI y, por lo que dijo anteriormente, es posible que pueda ejecutarlo en un subproceso que no sea UI, una situación en la que se debe esperar ... comportamiento inesperado.

Si ese es el caso, puede intentar convertir el subproceso en un subproceso de Single Threaded Apartment (STA), ya que el modelo de apatment es bastante más adecuado para los componentes COM (como los componentes ActiveX, en los que cae WebBrowser) y puede hacer de la siguiente manera:

yourThread.SetApartmentState(ApartmentState.STA);

Para obtener más información sobre los hilos STA, consulte esta página .

Como el control WebBrowser es un componente de AciveX, el contenido de esta página también es relevante y señala el mismo problema.

Espero eso ayude. ;)

En un escenario particular, un control WebBrowser no activa un controlador de eventos NavigationComplete o NavigationFailed .

Esto es lo que debería suceder:

  1. La aplicación nativa Windows Phone 8.1 Silverlight crea una instancia de WebBrowser y le proporciona una URL para cargar una página web de autenticación.
  2. WebBrowser control WebBrowser carga la url y muestra la página.
  3. El usuario ingresa las credenciales y toca un botón de enviar para PUBLICAR la información a un servicio de autenticación.
  4. El servicio de autenticación valida las credenciales y responde con un 302 (redirigir).
  5. WebBrowser control WebBrowser sigue la redirección.
  6. Un controlador de eventos NavigationComplete se adjunta al control. Cuando encuentra un patrón de URL que indica que la redirección tuvo éxito, ejecuta un método adicional.
  7. El método adicional extrae un token OpenID de los parámetros de consulta de URL de redireccionamiento.
  8. El usuario está autenticado y feliz.

Lo que realmente sucede:

Después de que el usuario envíe sus credenciales en el paso n. ° 3, WebBrowser muestra una página en blanco y no activa ningún controlador de eventos. El código está escuchando para cada controlador de eventos de navegación provisto por el control WebBrowser .

Lo que he intentado:

  • Reconstruí el escenario lo más de cerca posible con un servidor heroku de prueba. WebBrowser va a una página de entrada de credenciales ficticia con un botón de envío de POST que golpea heroku nuevamente; heroku responde con un 302 y la URL real de redirección. WebBrowser funciona muy bien O_o
  • Se onTap eventos onTap al WebBrowser que verifica la url actual / navega a otra página para ver si el control se rompe de alguna manera después del error de la página en blanco. El WebBrowser responde correctamente.
  • Aseguró que Javascript esté habilitado en el control.
  • Usó exactamente la misma infraestructura del lado del servidor con una aplicación de tableta con Windows 8 que comparte el 90% del mismo código pero con un control WebView . El WebView funciona bien.

¿Alguna sugerencia? ¿Alguien ha experimentado este control actuando así? ¿Alguien sabe de una biblioteca que podría resolver este problema (comercial o de código abierto)? ¿El puente Android para Windows o el puente iOS para Windows admiten Windows Phone 8?