设置源或导航后刷新Webview会取消UWP中的导航

时间:2018-11-26 14:29:40

标签: webview uwp

这是我的mainpage.xaml.cs

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        wv.Source = new Uri("https://www.youtube.com");
        //wv.Refresh();
    }
}

这有效-当我运行该应用后,YouTube就会立即加载。但是,当我取消注释wv.Refresh时,它将停止工作-我只能看到白色背景。当我使用wv.Navigate而不是wv.Source时也会发生这种情况。

1 个答案:

答案 0 :(得分:0)

首先,您对WebView :-D有很好的疑问。

我已经调试了它,看来即使将Source设置为URI,但内部WebView仍指向about:blank页面,刷新还为时过早,因此导航到您的URI的位置将被取消,而是刷新空白页面。

我想出了以下代码:

public MainPage()
{
    this.InitializeComponent();
    webview.NavigationStarting += Webview_NavigationStarting;
}

private void Webview_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
    Debug.WriteLine("Navigating " + args.Uri);
}

private void SetNextSource()
{        
    var uri = new Uri("https://www.google.com");
    Debug.WriteLine("Setting " + uri);
    webview.Source = uri;
    webview.Refresh();
    Debug.WriteLine("Set  " + webview.Source);
}

这是输出:

Sample run

从输出中可以看到,刷新完全忽略了Source属性,并且很可能使用了某种内部URI。

因此,要解决您的问题,您只需挂起NavigationCompleted事件并在其中执行Refresh()-到那时,WebView实际上将完成页面加载甚至会在内部指向新设置的URI。