Xamarin.iOS WKWebView и WKNavigationDelegate настраиваемое средство визуализации Intranet Ссылки на SharePoint не работают
Я работаю над одним приложением форм Xamarin и создал настраиваемое средство визуализации для использования собственных веб-представлений.
У нас есть некоторые URL-ссылки SharePoint в интрасети в содержимом веб-просмотра, которое не работает на реальном устройстве iPhone. Общедоступные URL-ссылки работают нормально, но URL-адреса SharePoint в интрасети не работают после нажатия на ссылку, содержимое веб-представления автоматически скрывается, и ссылка также не открывается в браузере Safari.
Странно, что в симуляторах работает нормально. Публичные URL-ссылки также работают нормально.
Ниже приведен наш URL-адрес SharePoint в интрасети, который не работает на реальном устройстве и работает в симуляторах.
https://test.demosharepointsite.com/informatik/_layouts/15/WopiFrame.aspx?sourcedoc=%7b25F01E60-0EEC-4A6B-BD26-81B2ED1911CA%7d&file=AA_TenantMigration_2in1_Device_O365=de.fault
Ожидаемое поведение:
При нажатии на ссылку она должна открывать URL-ссылки в браузере Safari.
Ниже приведен фрагмент кода встроенного настраиваемого средства визуализации iOS.
public class ExtendedWebViewRenderer : WkWebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
try
{
base.OnElementChanged(e);
NavigationDelegate = new AppWKNavigationDelegate(this);
}
catch (Exception ex)
{
}
}
}
public class AppWKNavigationDelegate : WKNavigationDelegate
{
ExtendedWebViewRenderer extendedWebViewRenderer;
public AppWKNavigationDelegate(ExtendedWebViewRenderer _extendedWebViewRenderer)
{
extendedWebViewRenderer = _extendedWebViewRenderer ?? new ExtendedWebViewRenderer();
}
public override async void DidFinishNavigation(WKWebView webView, WKNavigation navigation)
{
try
{
var extendedWebViewModel = extendedWebViewRenderer.Element as ExtendedWebViewModel;
if (extendedWebViewModel != null)
{
if (webView != null)
{
await System.Threading.Tasks.Task.Delay(100); // wait here till content is rendered
if (webView.ScrollView != null)
{
if (webView.ScrollView.ContentSize != null)
{
extendedWebViewModel.HeightRequest = (double)webView.ScrollView.ContentSize.Height;
}
}
}
}
}
catch (Exception ex)
{
}
}
public override void DecidePolicy(WKWebView webView, WKNavigationAction navigationAction, Action<WKNavigationActionPolicy> decisionHandler)
{
try
{
if (navigationAction != null)
{
if (navigationAction.NavigationType == WKNavigationType.LinkActivated)
{
if (navigationAction.Request != null)
{
if (navigationAction.Request.Url != null)
{
UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url);
decisionHandler(WKNavigationActionPolicy.Cancel);
}
}
}
else
{
decisionHandler(WKNavigationActionPolicy.Allow);
}
}
}
catch (Exception ex)
{
}
}
}
Может кто-нибудь помочь мне здесь? Спасибо.