Xamarin.forms Xamarin.iOS WKWebView和WKNavigationDelegate自定义呈现程序内部网SharePoint链接不工作
我正在开发一个Xamarin forms应用程序,并创建了自定义渲染器以使用本机web视图 我们在web视图内容中有一些内部网SharePoint URL链接,这些链接在iPhone real设备中不起作用。公共URL链接工作正常,但单击链接后,intranet SharePoint URL链接不工作web视图内容自动隐藏,并且该链接也不会在Safari浏览器中打开 奇怪的是,它在模拟器中运行良好。公共URL链接也可以正常工作 下面是我们的内部网SharePoint URL,它在真实设备中不起作用,在模拟器中也不起作用 https://test.demosharepointsite.com/informatik/_layouts/15/WopiFrame.aspx?sourcedoc=%7b25F01E60-0EEC-4A6B-BD26-81B2ED1911CA%7d&file=AA\u租户迁移\u 2in1\u设备\u O365.pdf&action=default 预期行为: 单击链接时,应在Safari浏览器中打开URL链接 以下是iOS本机自定义呈现程序的代码片段Xamarin.forms Xamarin.iOS WKWebView和WKNavigationDelegate自定义呈现程序内部网SharePoint链接不工作,xamarin.forms,xamarin.ios,wkwebview,custom-renderer,wknavigationdelegate,Xamarin.forms,Xamarin.ios,Wkwebview,Custom Renderer,Wknavigationdelegate,我正在开发一个Xamarin forms应用程序,并创建了自定义渲染器以使用本机web视图 我们在web视图内容中有一些内部网SharePoint URL链接,这些链接在iPhone real设备中不起作用。公共URL链接工作正常,但单击链接后,intranet SharePoint URL链接不工作web视图内容自动隐藏,并且该链接也不会在Safari浏览器中打开 奇怪的是,它在模拟器中运行良好。公共URL链接也可以正常工作 下面是我们的内部网SharePoint URL,它在真实设备中不起作
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)
{
}
}
}
公共类扩展WebViewRenderer:WkWebViewRenderer
{
受保护的覆盖无效OnElementChanged(VisualElementChangedEventArgs e)
{
尝试
{
基础。一个要素发生变化(e);
NavigationDelegate=新的AppWKNavigationDelegate(此);
}
捕获(例外情况除外)
{
}
}
}
公共类AppWKNavigationDelegate:WKNavigationDelegate
{
ExtendedWebViewRenderer ExtendedWebViewRenderer;
公共AppWKNavigationDelegate(ExtendedWebViewRenderer\u ExtendedWebViewRenderer)
{
extendedWebViewRenderer=_extendedWebViewRenderer??新建extendedWebViewRenderer();
}
公共覆盖异步void DidFinishNavigation(WKWebView、WKNavigation)
{
尝试
{
var extendedWebViewModel=extendedWebViewRenderer.Element作为extendedWebViewModel;
if(extendedWebViewModel!=null)
{
if(webView!=null)
{
wait System.Threading.Tasks.Task.Delay(100);//在此处等待,直到呈现内容
if(webView.ScrollView!=null)
{
if(webView.ScrollView.ContentSize!=null)
{
extendedWebViewModel.HeightRequest=(双精度)webView.ScrollView.ContentSize.Height;
}
}
}
}
}
捕获(例外情况除外)
{
}
}
公共覆盖无效决策策略(WKWebView webView、WKNavigationAction navigationAction、Action decisionHandler)
{
尝试
{
if(navigationAction!=null)
{
如果(navigationAction.NavigationType==WKNavigationType.LinkActivated)
{
if(navigationAction.Request!=null)
{
if(navigationAction.Request.Url!=null)
{
UIApplication.SharedApplication.OpenUrl(navigationAction.Request.Url);
decisionHandler(WKNavigationActionPolicy.Cancel);
}
}
}
其他的
{
decisionHandler(WKNavigationActionPolicy.Allow);
}
}
}
捕获(例外情况除外)
{
}
}
}
有人能帮我吗?谢谢。您好,同一网段内的物理设备是否与模拟器设备在一起?模拟器设备的网段应与Mac相同,但不确定物理设备是否保持相同,是否可以访问此intranet。您可以先检查物理设备的safari是否可以打开一个测试内联网。@JuniorJiang MSFT否物理设备和模拟器都不在同一网段中。两者都在不同的网段中。但至少该链接应该在Safari浏览器中打开,并且web视图内容不应该自动隐藏。对吗?如果链接可以在物理设备的Safari浏览器中打开,那么它应该可以在应用程序中工作。至少在本地网络环境中,您应该将它们保持在同一网段网络中。这不是问题,如果链接未在Safari浏览器中打开且无法连接到服务器,则可以。主要问题是点击链接后不应隐藏web视图内容。嗨,请问物理设备是否与模拟器设备位于同一网段内?模拟器设备的网段应与Mac相同,但不确定物理设备是否保持相同,是否可以访问此intranet。您可以先检查物理设备的safari是否可以打开一个测试内联网。@JuniorJiang MSFT否物理设备和模拟器都不在同一网段中。两者都在不同的网段中。但至少该链接应该在Safari浏览器中打开,并且web视图内容不应该自动隐藏。对吗?如果链接可以在物理设备的Safari浏览器中打开,那么它应该可以在应用程序中工作。至少在本地网络环境中,您应该将它们保持在同一网段网络中。这不是问题,如果链接未在Safari浏览器中打开且无法连接到服务器,则可以。主要的问题是它不应该在点击链接后隐藏web视图内容。