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 并且导航请求被取消
当前在 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 并且导航请求被取消