[XBAP] ¿Qué es WPF Browser Application?

julio 29, 2015 Christian Amado 0 Comentarios

Introducción

Muchas veces tenemos problemas con los famosos plugins en los innumerables navegadores existentes en el mercado. Un ejemplo claro es Google Chrome, que en versiones actuales deshabilita el complemento NPAPI y que a partir de setiembre de 2015 lo eliminará definitivamente. Por el momento no sabemos que pasarán con las aplicaciones desarrolladas en Silverlight.

Una solución brillante es utilizar WPF en el navegador (oficialmente soportado únicamente en Internet Explorer) para evitar el uso de plugins y facilitar la vida a los usuarios. Por el momento, esta solución no es multiplataforma. Podemos disfrutar de esta opción los usuarios de Windows.

XBAP

XBAP (XAML Browser Application) es una tecnología utilizada para crear aplicaciones RIA(Rich Internet Applications) reemplazando el uso de Silverlight.

Normalmente las aplicaciones Windows son compiladas en un archivo .exe, mientras que las aplicaciones de navegaor son compiladas en un archivo con extensión .xbap y puede ser ejecutado dentro de Internet Explorer (se puede correr en otros navegadores, extraoficialmente).

Las aplicaciones XBAP son ejecutadas en un entorno limitado de seguridad para evitar que las aplicaciones no confiables tomen el control de los recursos locales del sistema (eliminando archivos, leyendo datos confidenciales de la aplicación, etc.).

Diferencias entre XBAP y Silverlight

  1. XBAP requiere la instalación del .NET Framewrok 3.0 o superior. Silverlight necesita descargar e instalar un plugin.
  2. XBAP funciona sólo en Windows. Silverlight es multiplataforma.
  3. Silverlight sólo admite un subconjunto XAML. XBAP admite múltiples.
  4. Microsoft dará soporte a Silverlight hasta 2021. XBAP seguirá siendo soportado por muchos años.
  5. Puedes crear una aplicación WPF de escritorio y al mismo tiempo la aplicación XBAP.

Creando una aplicación XBAP

Creamos la aplicación de tipo WPF Browser Application:

Crear aplicacion

El explorador de soluciones se verá de la siguiente manera:

Explorador de soluciones

Agregamos el código XAML dentro del archivo Page1.xaml:

<Page x:Class="TestBrowserWPF.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
      Title="Page1">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        
        <GroupBox Header="Datos personales" Margin="10">
            <StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Stretch">
                <TextBlock Margin="2" Text="Ingrese su nombre: " />
                <TextBox Name="txtIngreso" Margin="2" MinWidth="50" MaxWidth="400" />
                <Button Margin="2" Content="Saludar" Click="Button_Click" />
            </StackPanel>
        </GroupBox>
        
        <GroupBox Grid.Row="1" Header="Resultado" Margin="10">
            <StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Stretch">
                <TextBlock Margin="2" Text="El resultado es: " />
                <TextBlock Name="txtResultado" Margin="2" />
            </StackPanel>
        </GroupBox>
    </Grid>
</Page>

Su code-behind correspondiente sería el siguiente:

using System.Windows;
using System.Windows.Controls;

namespace TestBrowserWPF
{
    /// 
    /// Interaction logic for Page1.xaml
    /// 
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string mensaje = string.Format("Hola {0}, bienvenido al mundo XBAP!", this.txtIngreso.Text); 
            //Saludamos en el cuadro de texto
            this.txtResultado.Text = mensaje;

            //Mostramos un mensaje desde el navegador con MessageBox (?)
            MessageBox.Show(mensaje, "MENSAJE", MessageBoxButton.OK, MessageBoxImage.Information);
        }
    }
}

Ejecutamos la aplicación y abrirá el navegador. Luego, solicitará permiso para ajecutarse (generalmente 2 veces, porque la aplicación no está firmada)

Otorgar permisos

El resultado final quedaría de la siguiente manera:

Resultado final

Conclusión

Si lugar a dudas, este tipo de aplicaciones tienen un buen futuro. Una gran desventaja es que no tiene soporte multiplataforma (pero el .NET framework si...) pero eso no limita sus beneficios, sobre todo que desde el navegador puedes tener acceso a todo el sistema, una vez otorgados los permisos y no estar limitados a un plugin o HTML que no posee acceso a ciertas funcionalidades del sistema.