首页 > 解决方案 > 具有本地内容的 Xamarin.Forms WebView 未触发导航事件

问题描述

我在这里实现了HybridWebView

我想检测页面何时完成加载,但导航事件似乎没有触发。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:lib="clr-namespace:Xam.Forms.MyStuff"
             x:Class="Xam.Forms.MyStuff.HybridWebView">
    <ContentPage.Content>
        <lib:HybridWebView x:Name="hybridWebView" Uri="index.html"
                Navigated="HybridWebView_Navigated"
                HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
    </ContentPage.Content>
</ContentPage>

为什么导航事件不触发?是因为源内容是在本地加载的,而不是使用实际的 URL?如果是这样,是否有其他方法可以检测本地来源的 html 文件何时完成加载?

我什至可以在单个渲染器中检测它。

标签: xamarinwebviewxamarin.forms

解决方案


在特定于平台的渲染器中创建元素并捕获事件。以下示例适用于 UWP,但该模式也适用于 iOS 和 Android。

在 OnElementChanged 事件中,创建本机 WebView 元素并分配事件处理程序:

if(Control == null)
{
    var webView = new Windows.UI.Xaml.Controls.WebView();
    {
        webView.Navigate(uri);
    };
    webView.NavigationStarting += WebView_NavigationStarting;
}

创建事件处理程序:

private void WebView_NavigationStarting(Windows.UI.Xaml.Controls.WebView sender, Windows.UI.Xaml.Controls.WebViewNavigationStartingEventArgs args) {}

推荐阅读