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 **
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)