Saltar al contenido

xamarin.forms Manejar evento Clicked en WebView

Solución:

Puedes usar el HybridWebView de XLabs y use la inyección de JavaScript para invocar y controlar los clics en su control de Xamarin. El código javascript inyectado puede agregar un detector de eventos de clic en capture escenario. Cuando se detecta un clic, utiliza Native devolución de llamada para enviar información al código C #.

Por ejemplo – puede definir un control personalizado como este:

public class ClickEventArgs : EventArgs
{
    public string Element { get; set; }
}

public class ClickableWebView : XLabs.Forms.Controls.HybridWebView
{
    public event EventHandler<ClickEventArgs> Clicked;

    public static readonly BindableProperty ClickCommandProperty =
        BindableProperty.Create("ClickCommand", typeof(ICommand), typeof(ClickableWebView), null);

    public ICommand ClickCommand
    {
        get { return (ICommand)GetValue(ClickCommandProperty); }
        set { SetValue(ClickCommandProperty, value); }
    }

    public ClickableWebView()
    {
        LoadFinished += (sender, e) => 
            InjectJavaScript(@"
            document.body.addEventListener('click', function(e) {
                e = e || window.event;
                var target = e.target || e.srcElement;
                Native('invokeClick', 'tag='+target.tagName+' id='+target.id+' name="+target.name);
            }, true /* to ensure we capture it first*/);
        ");

        this.RegisterCallback("invokeClick", (string el) => {
            var args = new ClickEventArgs { Element = el };

            Clicked?.Invoke(this, args); 
            ClickCommand?.Execute(args);
        });
    }
}

Uso de XAML de muestra

<local:ClickableWebView 
    Uri="https://google.com" 
    Clicked="Handle_Clicked"
/>

y código subyacente de muestra

void Handle_Clicked(object sender, CustomWebView.ClickEventArgs e)
{
    Xamarin.Forms.Application.Current.MainPage.DisplayAlert("WebView Clicked", e.Element, "Dismiss");
}

** Producción **

salida de muestra

Alternativamente, también puede enlazar ClickCommand propiedad para implementar esto usando el patrón MVVM.

Estoy usando este truco: coloque WebView en una cuadrícula e inserte un BoxView en la misma celda. Luego coloque un controlador en BoxView.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *