es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El evento BackRequested causa que la aplicación se bloquee en Windows 10 Mobile v. 1511

Estoy creando un navegador web para UWP en todas las versiones de Windows. Así que, me di cuenta de que cuando el WebView navega desde el sitio de YouTube hacia un video de YouTube (cuando la navegación no se ha completado en ese momento), al presionar el botón de retroceso del hardware, la aplicación se bloquea. Lo más extraño es que esto no sucede cuando la aplicación se ejecuta en modo de depuración o de lanzamiento. Además, cuando escribo el mismo código en el botón de retroceso de mi aplicación, la función funciona perfectamente. También ocurre el mismo bloqueo cuando estoy escribiendo algún código en el evento SystemNavigationManager.GetForCurrentView().BackRequested, sin importar qué. Lo mismo sucede con HardwareButtons.BackPressed. El código es el siguiente:

private void CurrentView_BackRequested(object sender, BackRequestedEventArgs e)
{
    e.Handled = true;

    if (appView.IsFullScreenMode)
    {
        appView.ExitFullScreenMode();
    }
    else
    {
        Frame frame = Window.Current.Content as Frame;
        if (!frame.CanGoBack && currentWebView.CanGoBack)
        {
            currentWebView.GoBack(); //la función real
        }
        else
        {
            if (PivotMain.Items.Count > 1)
            {
                CloseOneTab(PivotMain.SelectedWebViewItem);
            }
            else
            {
                e.Handled = false;
            }
        }
    }
}

Actualización 1: la aplicación no se bloquea cuando el WebView se establece en WebViewExecutionMode.SeparateThread. Pero de alguna manera siento que es arriesgado. 🤷‍♂️.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí parece estar relacionado con el modelo de subprocesamiento utilizado por WebView. Al navegar a un video de YouTube, la navegación puede no completarse antes de que se presione el botón de retroceso del hardware, lo que puede hacer que la aplicación se bloquee. Este problema no ocurre al ejecutar la aplicación en modo depuración o lanzamiento, y parece estar relacionado con el manejo de eventos como SystemNavigationManager.GetForCurrentView().BackRequested y HardwareButtons.BackPressed.

    Una solución alternativa para este problema es configurar el modo de ejecución de WebView en WebViewExecutionMode.SeparateThread, lo que parece evitar que se produzca el bloqueo. Sin embargo, esta puede no ser la solución ideal ya que puede tener riesgos.

    Puede ser necesario realizar una investigación adicional y depuración para identificar la causa raíz del problema y encontrar una solución más sólida.

Comments are closed.