Xamarin Forms WebView запускает Навигационное событие несколько раз - PullRequest
0 голосов
/ 10 октября 2019

У меня есть простая ContentPage с WebView. Источник WebView вручную установлен на "https://www.turkishairlines.com/".. В результате я вижу, что событие Navigating запускается один раз, а событие Navigated запускается три раза. Я пытался использовать разные веб-сайты и получать разное количество событий Navigated для разных сайтов. Я попытался сравнить запущенные события Navigated, чтобы найти разницу между промежуточным и конечным событием, но безуспешно. Мне нужно перехватить событие, когда веб-сайт действительно полностью загружен. Как я могу перехватить последнее событие Navigated? MainPage.xaml:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="WebTest.MainPage">

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label HorizontalOptions="Center" x:Name="NavCounterLabel"/>
    <WebView x:Name="WebV"
                HorizontalOptions="FillAndExpand"
                VerticalOptions="FillAndExpand"
                Grid.Row="1"/>
    <ActivityIndicator x:Name="BusyIndicator"
                        HorizontalOptions="Center"
                        VerticalOptions="Center"
                        Color="Red"
                        HeightRequest="50"
                        WidthRequest="50"
                        Grid.Row="1"/>
</Grid>
</ContentPage>

MainPage.xaml.cs:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        BusyIndicator.IsRunning = BusyIndicator.IsVisible = true;
        WebV.Source = "https://www.turkishairlines.com/";
        WebV.Navigating += WebV_Navigating;
        WebV.Navigated += WebV_Navigated;
    }

    private void WebV_Navigated(object sender, WebNavigatedEventArgs e)
    {
        BusyIndicator.IsRunning = BusyIndicator.IsVisible = false;
        NavCounterLabel.Text = (Int32.Parse(NavCounterLabel.Text)+1).ToString();
    }

    private void WebV_Navigating(object sender, WebNavigatingEventArgs e)
    {
        BusyIndicator.IsRunning = BusyIndicator.IsVisible = true;
        NavCounterLabel.Text = "0";
    }

1 Ответ

0 голосов
/ 10 октября 2019

Вот мой WebViewPage.xaml

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IntentoAssociates.WebViewPage">
    <Grid>
        <!-- Place new controls here -->
        <WebView x:Name="WebV"
                 HorizontalOptions="FillAndExpand"
                 VerticalOptions="FillAndExpand" />
        <ActivityIndicator x:Name="BusyIndicator"
                           HorizontalOptions="Center"
                           VerticalOptions="Center"
                           Color="Red"
                           HeightRequest="50"
                           WidthRequest="50" />
    </Grid>
</ContentPage>

А вот мой WebViewPage.xaml.cs

using System;
using System.Collections.Generic;
using Xamarin.Forms;

namespace IntentoAssociates
{
    public partial class WebViewPage : ContentPage
    {
        public WebViewPage()
        {
            InitializeComponent();
            Title = "Intento Associates";
            BusyIndicator.IsRunning = BusyIndicator.IsVisible = true;
            WebV.Source = "https://www.turkishairlines.com/";
            WebV.Navigating += WebV_Navigating;
            WebV.Navigated += WebV_Navigated;
        }

        private void WebV_Navigated(object sender, WebNavigatedEventArgs e)
        {
            BusyIndicator.IsRunning = BusyIndicator.IsVisible = false;
        }

        private void WebV_Navigating(object sender, WebNavigatingEventArgs e)
        {
            BusyIndicator.IsRunning = BusyIndicator.IsVisible = true;
        }
    }
}

Я использую формы Xamarin 4.1.555618 во всех моих проектах иПожары Навигация только один раз, когда страница загружена. Вы можете проверить код и сообщить мне, если у вас есть какие-либо проблемы. Удачного кодирования !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...