public void BeforeNavigate2(object pDisp, ref object urlObject, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel) { Debug.Assert(_parent != null, "Parent should have been set"); //Note: we want to allow navigation if we haven't already navigated. if (AllowNavigation || !_haveNavigated) { Debug.Assert(urlObject is null || urlObject is string, "invalid url type"); Debug.Assert(targetFrameName is null || targetFrameName is string, "invalid targetFrameName type"); Debug.Assert(headers is null || headers is string, "invalid headers type"); // // If during running interop code, the variant.bstr value gets set // to -1 on return back to native code, if the original value was null, we // have to set targetFrameName and headers to string.Empty. if (targetFrameName is null) { targetFrameName = string.Empty; } if (headers is null) { headers = string.Empty; } string urlString = urlObject is null ? string.Empty : (string)urlObject; WebBrowserNavigatingEventArgs e = new WebBrowserNavigatingEventArgs( new Uri(urlString), targetFrameName is null ? string.Empty : (string)targetFrameName); _parent.OnNavigating(e); cancel = e.Cancel; } else { cancel = true; } }