WPF WebBrowser control. need to prevent it from closing within an app - c#

I have a WPF where I am implementing a WebBrowser control and I have a list of objects that when i select them it changes the url binding for the webBrowser control and all is well.
However, if the web page I am on tries to close the Webpage, a dialog pops up where you can hit yes or no to close the "window" (the WebBrowser control)
If the user hits "yes" then the web browser control is closed and exceptions are thrown when you try to select something else in the list because the window doesn't exist anymore.
The webbrowser control does not have a method for closing exposed where i can get to it and I was able to override the "Window.Close()" method but that also prevented me from closing the main app window.
I have tried inheriting from the WebBrowser class but it is sealed so I can't inherit to add event handlers or override methods such as "Close()" or events such as "OnClosing()"
I have no control over the website because it is a third party product.
Also, the WebBrowser control is not cancelling navigation when exiting.
so my question is
A. Is it possible to intercept the dialog and always answer "no"?
or
B. Is there another way to prevent the WebBrowser control from closing even if the person says "yes" to the dialog?

So, I ended up putting the control in it's separate view and then constructing and destroying the view as a dialogue

Once I had to solve a similar situation. It was a Delphi application, with an embedded TWebBrowser component, which is essentially the same thing as the WebBrowser of .NET. The software automatically clicked on elements of the webpage, and there was a case when after the click a confirm dialog popped up. The simplest way to press the OK button automatically was to call FindWindow with the parameters of the confirm dialog, and use the window handle to send it an Enter key press by calling SendInput. I think in your case an Escape key press is needed.

Related

How can I make a control enabled even when a modal form is shown?

In a WinForms app, I have a specific set of buttons inside a UserControl which I need to be intact always, even if a modal form is currently displayed.
I do not have control over the modal form appearing (can't change ShowDialog to simply Show). I wonder if there is any way to override/suppress the modality of another form.
Is there a way to do this?
I think the way to go is creating your own modal-form that will look like or share the same functionality as the uncontrolled modal form (I'm doing that a lot with message boxes for example)
Once you will do that, you will be able to call the modal form with 'Show()', and on the caller form, you will be able to determine what happen when your custom modal form will be shown (disable all controls instead of the user control that hosting the buttons you want to keep clickable).
If you cannot create your own modal-form as suggested, maybe you should consider invoking the user control and the uncontrolled modal with different executables (one can invoke the other) so it will work in parallel side by side on the screen. You can share the information between the two assemblies using named pipes for example.

WPF WebBrowser telling when user has navigated with a click of a button

I have a WebBrowser control that is pointed at a website not owned by me. It is a rather slow server and I want to display the wait cursor (mouse pointer) while waiting for page loading. If the navigation is instantiated with the Navigate() method, there is no problem, Navigating and Load_Completed events inform me what is happening. However, if the user navigates by clicking a button, the Navigating event does not "fire". Is there any event (or combination of events/properties) that can be used to this purpose?

window.showModalDialog and whatever permutation of WebBrowser

Is there anyway to get access to or control the windows that pops up from JS calling window.showModalDialog?
I am currently using the WPF webbrowser which as I've noticed has very limited help in this area so I tried switching over to the Forms.WebBrowser version but that also doesn't seem to help me... I tried all the different permutations of newwindow events but they only fire when a completely new IE window pops up like from a _blank target...
The window that pops up has a series of check boxes I need to click through and then click OK from code
the best thing I've figured out as a plan so far is to inject some JS that emulates the return parameter of the dialog. But I was curious if there's a way to control or access this dialog from code...

How can I temporarily prevent a form from getting focus/activating?

my application opens n forms and the user can freely switch back and forth among these forms.
When the user decides to confirm the operations performed on one of the forms, I would like to block the other ones until this process (which can potentially open MessageBoxes and/or other forms) comes to an end.
It is not enough to disable the forms, since the user can't do anything on them, but the Activated event is fired, and this is exactly what I want to avoid.
I tried to set ControlStyles.Selectable to false to all these forms, but it doesn't work.
Just in order to make it clearer, the forms cover the whole screen, so the users activate them clicking on the taskbar. This is the situation where opening a modal form and having the confirm code executed there does not prevent the Activated event to be fired.
Try to use Form.ShowDialog() method.
You can use Form.ShowDialog Method method to display a modal dialog box in your application. When this method is called, the code following it is not executed until after the dialog box is closed.

Curious pop-up behavior when using WebBrowser class

My C# application includes an embedded web browser, which is made possible by the System.Windows.Forms.WebBrowser class. Users are able to navigate to websites using the app, however, when they encounter a page that includes a pop-up window, the pop-up window is opened by Internet Explorer.
Does anyone know how to suppress that behavior?
NOTE: I'm new to C#, so please take that into consideration when responding.
Are you looking to actively block popups or handle them in your application? If you're wanting to customize the blocking, then you'll have to implement the DWebBrowserEvents2 interface, specifically the NewWindow3 method. NewWindow3 method has specific functionality for blocking window popups (i.e. setting the Cancel parameter to true). These methods will also let you show your own window if you wish, though you'll have to provide your own Form to host yet another WebBrowser.
If you'd like to see some real C# source code providing advanced functionality with the WebBrowser control, I'd have to say that this article on CodeProject provided almost everything I know about the WebBrowser control. Be sure to download the source!
#Kramii is correct that you can also use the NewWindow2 event to prevent the popup. NewWindow3 provides additional parameters for if you're looking to inspect the URL or other data about the navigate to actually sometimes block and sometimes handle the popup yourself.
IIRC you can trap the NewWindow2 event on the WebBrowser control and set Cancel = true to prevent the pop-up.
This article may help:
http://www.codeproject.com/KB/cpp/ExtendedWebBrowser.aspx#GoalBlock

Categories

Resources