xamarin.forms - Xamarin.iOS WKWebView 和 WKNavigationDelegate 自定义渲染器 Intranet SharePoint 链接不起作用
问题描述
我正在开发一个 Xamarin 表单应用程序,并且我创建了自定义渲染器以使用本机 Web 视图。
我们在 Web 视图内容中有一些 Intranet SharePoint URL 链接,这些链接在 iPhone 真实设备中不起作用。公共 URL 链接工作正常,但 Intranet SharePoint URL 链接在单击链接后无法正常工作,Web 视图内容会自动隐藏,并且该链接也未在 Safari 浏览器中打开。
奇怪的是它在模拟器中运行良好。公共 URL 链接也可以正常工作。
以下是我们的 Intranet SharePoint URL,它不能在真实设备中运行,也不能在模拟器中运行。
https://test.demosharepointsite.com/informatik/_layouts/15/WopiFrame.aspx?sourcedoc=%7b25F01E60-0EEC-4A6B-BD26-81B2ED1911CA%7d&file=AA_TenantMigration_2in1_Device_O365.pdf&action=default
预期行为:
单击链接时,应在 Safari 浏览器中打开 URL 链接。
以下是 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)
{
}
}
}
有谁可以帮我离开这里吗?谢谢。
解决方案
推荐阅读
- html - 正确对齐在 bootsrap 导航栏中不起作用
- sql-server - ORA-00997 非法使用 Long 数据类型 Oracle DBlink-msSQLserver
- python - 如何将张量流图分成两部分并将它们保存到两个saved_model?
- python - 如何在 seaborn 的 catplot 中添加网格线?
- excel - 仅适用于 Excel 中满足两个条件的数据的标准偏差
- c# - 在 VS 源代码管理中找不到引用的组件“ceTe.DynamicPDF.40”
- graph - Gremlin 查询以查找在两个方向上连接的顶点
- c - 如何防止c中main函数的错误多重定义?
- c# - 嵌套表中的 Microsoft Entity Framework Core Sum 项
- c - 发出 x86 指令是否取决于字节序?