Webview2 导航

Webview2 Navigation

当前在 Webview2 浏览器中,如果导航到特定的 URL,如下所示

browser.Source = URL;

这会异步触发 NavigatingStarting 事件。

如何为每个设置为触发事件的源触发同步调用?

问题:我保留了一个 bool 变量来检查是否在我的应用程序内部触发了导航,并在 navigatingstarting 事件结束时重置它。因为它是一个异步调用,所以它在第一次调用后重置,而下一次调用不在我的应用程序中。

    void SetBrowserUrl(Uri value)
    {
    m_bInsideNavigateCall = true;
    priorsWebBrowser.Source = value;
    }
    
    void priorsWebBrowser_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e)
    {
    if(m_bInsideNavigateCall)
    {

    e.Cancel = false;
       m_bInsideNavigateCall = false; // Reset for next inside call
    }
    else
    {
      e.Cancel = true;
    }
    }

这里的问题是如果调用 SetBrowserUrl 两次。导航开始取消第二次调用,因为它不是同步的

我创建了一个字符串列表。

List<String> insideNavigatingURLS; //Class level variable

就在调用 web-browser 进行导航之前,我将 URL 添加到列表中。

  internalURLs.Add(uri.AbsolutePath.ToLower());                     
  webBrowser.Source = uri; 

在 NavigationStarting 事件中添加了一个检查以查看列表是否包含导航url如果不包含则将取消请求。

void webBrowser_Navigating(object sender, CoreWebView2NavigationStartingEventArgs e)
{
    if (!internalUrls.Contains(e.Uri))  
    {
        e.Cancel = true; 
    }
    else
    {                
        internalUrls.Remove(e.Uri);
        e.Cancel = false;
    }
} 

因此当触发后退或前进导航时,列表不包含 URL 并且导航请求被取消