【问题标题】:Xamarin.iOS WebView disappears after 10th reloadXamarin.iOS WebView 在第 10 次重新加载后消失
【发布时间】:2020-11-10 19:45:03
【问题描述】:

我在 Xamarin.Forms 中有一个基本的 WebView,如下所示:

<WebView AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" x:Name="ChartWebView" Style="{StaticResource BackgroundStyle}">
     <WebView.Source>
          <HtmlWebViewSource Html="{Binding ChartHTML}" />
     </WebView.Source>
</WebView>

我使用 WebView 来显示 Chart.js 图表,它工作得非常好。在我的页面上,我有一个按钮,用户可以在其中请求数据。

private async Task RequestData()
{
    //Doing some stuff to get data ...
    BuildChartHTML();
}

private void BuildChartHTML()
{
    var html = GetChartJSConfigString();
    Device.BeginInvokeOnMainThread(() =>
    {
        ChartWebView.Source = new HtmlWebViewSource
        {
            Html = html
        };
    });
}

但是,仅在 iOS 上,每次恰好在第 10 次请求/重新加载时,WebView 都会变为空白。之后它也保持空白。我需要重新导航到此页面以使其重新启动并运行。我尝试按照this 线程中的描述调整WebView.Navigated 的高度,但没有成功。

在具有相同代码库的 Android 上不会出现此问题。

如果这是一个框架错误,请接受任何解决方法。

PS:我显然确保我正在加载的 html 没有损坏。我加载了 10 次相同的数据,并比较了第 10 次加载的 html,WebView 崩溃了。它是完全相同的 HTML 字符串。

【问题讨论】:

  • 因为它只在第 10 次才起作用。我认为问题不是由您的代码引起的。您可以将问题发布到 github github.com/xamarin/Xamarin.Forms/issues/new/choose 。我们会跟进。
  • 我发现这个错误与 xamarin 无关,但我会发布一个基于 xamarin 的解决方案,作为其他任何为此苦苦挣扎的人的答案

标签: xamarin xamarin.forms xamarin.ios


【解决方案1】:

原来是 iOS WKWebView 和 HTML canvas 使用的问题(chart.js 在画布上渲染)。

在调试到我的 WebView 之后(愚蠢的我之前没有考虑过这种可能性),我发现画布内存超过了限制。在here 发布的解决方案的帮助下,我设法避免了这个问题。

请记住,这个解决方案有点老套。基本上我所做的是,正如上面链接中所指出的,我每次重新加载图表时都会“删除”画布。 “删除”是指将画布设置为widthheight 为零。应用于我的代码,解决方案如下所示:

在浏览器中运行的 javascript 中,我添加了如下函数:

function deleteCanvas() {
    //Get the main canvas where the chart is rendered to
    var chart = document.getElementById('chart'); 
    chart.height = 0;
    chart.width = 0;
}

然后每次我调用我的BuildChartHTML() 函数时,我都会在我的 c# 代码中调用这个方法,如下所示:

Device.BeginInvokeOnMainThread(() =>
{
    ChartWebView.Source = new HtmlWebViewSource
    {
       Html = html
    };
    ChartWebView.Eval("deleteCanvas()");
});

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2013-11-15
    • 2019-06-14
    相关资源
    最近更新 更多