MicrosoftEdge / WebView2Feedback

Feedback and discussions about Microsoft Edge WebView2
https://aka.ms/webview2
456 stars 55 forks source link

CoreWebView2NavigationCompletedEventArgs does not include a `Uri` property. Why? #580

Open dmcgloin opened 4 years ago

dmcgloin commented 4 years ago

The CoreWebView2NavigationCompletedEventArgs event does not include a Uri property. This is the event received when subscribing to the WebView2 NavigationCompleted event. This is rather inconvenient and does not align with the CoreWebView2NavigationStartingEventArgs event which does include a Uri property.

Is this "by design"? Because it feels just like an omission.

Our we now supposed to use a dictionary of NavigationIds to figure out the Uri based on remembering the Uri we get in the NavigationStarting event?

package id="Microsoft.Web.WebView2" version="1.0.674-prerelease" targetFramework="net48"

AB#30069393

ukandrewc commented 4 years ago

At that point, uri is available from WebView2.url or sender.url

dmcgloin commented 4 years ago

Thanks @ukandrewc . But do you mean source, as in:

private void WebBrowser_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) { var uri = (sender as Microsoft.Web.WebView2.Wpf.WebView2).Source;

ukandrewc commented 4 years ago

Sorry yes, Url is an extension of mine ;-)

dmcgloin commented 4 years ago

Thanks @ukandrewc

I guess I'm still calling this a bug/design issue.

champnic commented 4 years ago

I've added this to our backlog, thanks!

OllieJones commented 3 years ago

A fortiori, CEFSharp's frame navigation complete event gives the Uri of the frame. It's possible to get the Uri from WebView2's frame navigation started event, stash it in a Dictionary, then look it up on frame navigation completed. But it would have been super nice to not have to do that. Especially because it looks like the frame navigation completion event can fire while the debugger's stopped on a breakpoint in frame navigation started.

nonew commented 2 years ago

@champnic When will this feature be added to the completed event args? It's been two years since the feature was proposed. Thanks!

champnic commented 2 years ago

This is currently a Priority 3 on our backlog, so I can't give an accurate timeline, but probably not for a while. Sorry.

santra-a commented 2 years ago

This one definitely needs to be in at least P2 if not P1. As more and more people migrate out of WebBrowser the need for URI in NavigationCompleted event will be felt.

champnic commented 2 years ago

@santra-a I'll let the owning team know. Does the workaround of checking the "Source" property work for you in the meantime?

mbodm commented 1 year ago

@santra-a

Having an e.Uri in the NavigationCompleted event would be imo very appreciated.

Foremost since your above workaround can not always be applied, cause of this WebView2 issue i had to handle with.

I had a hard time with all that stuff and my life would have been a million times easier if i had an e.Uri in the NavigationCompleted event. 😞

novac42 commented 1 year ago

@santra-a @MBODM Could you please elaborate a bit more about the scenario you are trying to accomplish with URI property? Some example use cases would be very helpful. Thanks!

mbodm commented 1 year ago

Hey @santra-a,

thx for the reply.

In example here: https://github.com/MicrosoftEdge/WebView2Feedback/issues/3461

Or in every other scenario, where you want to know the requesting Uri, when handling stuff in NavigationCompleted event.

Best regards

Mogikan commented 11 months ago

@novac42 @santra-a I'm using microsoft one drive sdk and trying to port it to winui 3.0 and webview2.0. As you can see there was an url property in args and it was used. And now it disappeared. How come that you deleted it? Why do you waste so many years in chats instead of simply fixing design bug?https://github.com/OneDrive/onedrive-sdk-dotnet-msa-auth-adapter/blob/master/src/OneDrive.Sdk.Authentication.UWP/Web/IotFriendlyWebDialog.xaml.cs

pushkin- commented 6 months ago

@champnic I need this as well but also for iframes. And the [CoreWebView2Frame[(https://learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2frame?view=webview2-dotnet-1.0.2420.47) class doesn't contain any type of Source property, so I'm having to intercept the NavigationStarting event, grab the URI from that, save it in some datastructure mapped to my the navigation ID, and then retrieve it when NavigationCompleted has fired.

mbodm commented 6 months ago

@champnic I need this as well but also for iframes. And the [CoreWebView2Frame[(https://learn.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2frame?view=webview2-dotnet-1.0.2420.47) class doesn't contain any type of Source property, so I'm having to intercept the NavigationStarting event, grab the URI from that, save it in some datastructure mapped to my the navigation ID, and then retrieve it when NavigationCompleted has fired.

Yep, that‘s exactly the same, what i did. A developer’s only chance is to link the navigation IDs with the starting URLs. Since the IDs are your only single point of truth.

Would still keep this issue open, since it‘s wether a great solution (to a relatively simple problem, for the WebView2 devs, imo), nor do i like to bring such form of „state“ (i.e. some dict with IDs and URLs) into play.

Also this workaround becomes very „funny“ when dealing with redirects. 😜