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)
        {
            
        }
    }
}


Может кто-нибудь помочь мне здесь? Спасибо.

0 ответов

Другие вопросы по тегам