Wenn man ein WebView in seine App einbindet, besteht die Gefahr dass dieses durch einen Link auf eine Seite navigiert zu der man eigentlich nicht möchte.
Diese Ableitung des Controls ermöglicht auf einfache Art- und Weiße das ausschließliche Navigieren auf bestimmten Seiten. Welche das sind, kann man mit einem Regex bestimmen.
Benötigte Namespaces
System
System.Text.RegularExpressions
Xamarin.Forms
Tipp: Um den Regex im XAML zu definieren empfehle ich folgendes Snippet:
http://dotnet-snippets.de/snippet/xamarin-forms-regex-im-markup-erstellen/14122
/// <summary>
/// Stellt ein <see cref="WebView"/>-Element dar, welches den Standard-Browser öffnet, sobald zu einer URL navigiert werden soll die einem regulären Ausdruck nicht entspricht.
/// </summary>
public class NoExternWebView : WebView
{
/// <summary>
/// Erstellt eine neue Instanz der <see cref="NoExternWebView"/>-Klasse.
/// </summary>
public NoExternWebView()
{
this.Navigating += this.OnWebViewNavigating;
}
/// <summary>
/// Bezeichnet die <see cref="AllowedUrlRegex"/>-Abhängigkeitseigenschaft.
/// </summary>
public static readonly BindableProperty AllowedUrlRegexProperty = BindableProperty.Create<NoExternWebView, Regex>(p => p.AllowedUrlRegex, null);
/// <summary>
/// Ruft den regulären Ausdruck für die URL-Prüfung ab oder legt diesen fest.
/// </summary>
public Regex AllowedUrlRegex
{
get { return (Regex)this.GetValue(AllowedUrlRegexProperty); }
set { this.SetValue(AllowedUrlRegexProperty, value); }
}
private void OnWebViewNavigating(object sender, WebNavigatingEventArgs e)
{
if (e.Url == null
|| this.AllowedUrlRegex == null
|| this.AllowedUrlRegex.Match(e.Url).Success) return;
Device.OpenUri(new Uri(e.Url));
e.Cancel = true;
}
}
Kommentare zum Snippet