<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>How To:  Close the Form hosting the WebBrowser control when scripting calls window.close in the .Net Framework version 2.0</title><link>http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx</link><description>By design the WebBrowser Control does not close the parent Form when WebBrowser Control is closed. Here is one way you can accomplish this. The WebBrowser will send a WM_NOTIFYPARENT notification that can be captured and an event raised that a host can</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: How To:  Close the Form hosting the WebBrowser control when scripting calls window.close in the .Net Framework version 2.0</title><link>http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx#5941824</link><pubDate>Tue, 06 Nov 2007 22:05:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5941824</guid><dc:creator>NeilS</dc:creator><description>&lt;p&gt;Jeff - following on from your NewWindow2 event capture in a managed web browser article - again this was really helpful.&lt;/p&gt;
</description></item><item><title>re: How To:  Close the Form hosting the WebBrowser control when scripting calls window.close in the .Net Framework version 2.0</title><link>http://blogs.msdn.com/jpsanders/archive/2007/05/25/how-to-close-the-form-hosting-the-webbrowser-control-when-scripting-calls-window-close-in-the-net-framework-version-2-0.aspx#7680257</link><pubDate>Wed, 13 Feb 2008 23:32:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7680257</guid><dc:creator>disccomp</dc:creator><description>&lt;p&gt;I am using an extendedwebbrowser, Your code almost ties up the last loose end. The only trouble is the closing event fires after windows asks whether to close the window after window.close is called from a script.&lt;/p&gt;
&lt;p&gt;---------------------------------&lt;/p&gt;
&lt;p&gt;Imports System.Runtime&lt;/p&gt;
&lt;p&gt;Imports System.ComponentModel&lt;/p&gt;
&lt;p&gt;'Extend the WebBrowser control&lt;/p&gt;
&lt;p&gt;Public Class ExtendedWebBrowser&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Inherits WebBrowser&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private cookie As AxHost.ConnectionPointCookie&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private events As WebBrowserExtendedEvents&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private Const WM_PARENTNOTIFY As Integer = &amp;amp;H210&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private Const WM_DESTROY As Integer = 2&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;'Define New event to fire&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Event WindowClosing()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Protected Overrides Sub WndProc(ByRef m As Message)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Select Case m.Msg&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Case WM_PARENTNOTIFY&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (Not DesignMode) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If (m.WParam = WM_DESTROY) Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;' Tell whoever cares we are closing&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RaiseEvent WindowClosing()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DefWndProc(m)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Case Else&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyBase.WndProc(m)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Select&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;'This method will be called to give you a chance to create your own event sink&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Protected Overloads Overrides Sub CreateSink()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'MAKE SURE TO CALL THE BASE or the normal events won't fire&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyBase.CreateSink()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;events = New WebBrowserExtendedEvents(Me)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cookie = New AxHost.ConnectionPointCookie(Me.ActiveXInstance, events, GetType(DWebBrowserEvents2))&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Protected Overloads Overrides Sub DetachSink()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;If cookie IsNot Nothing Then&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cookie.Disconnect()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cookie = Nothing&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End If&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;MyBase.DetachSink()&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;'This new event will fire when the page is navigating&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Event NewWindowWithTaget As EventHandler(Of WebBrowserExtendedNavigatingEventArgs)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Protected Sub OnNewWindow3(ByVal url As String, ByVal e As WebBrowserExtendedNavigatingEventArgs)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RaiseEvent NewWindowWithTaget(Me, e)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;'This class will capture events from the WebBrowser&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private Class WebBrowserExtendedEvents&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Inherits System.Runtime.InteropServices.StandardOleMarshalObject&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Implements DWebBrowserEvents2&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Private _Browser As ExtendedWebBrowser&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Sub New(ByVal browser As ExtendedWebBrowser)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Browser = browser&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Public Sub NewWindow3(ByVal pDisp As Object, ByRef cancel As Boolean, ByRef flags As Object, ByRef hostURL As Object, ByRef URL As Object) Implements DWebBrowserEvents2.NewWindow3&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dim args As New WebBrowserExtendedNavigatingEventArgs(URL)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.Cancel = cancel&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Browser.OnNewWindow3(URL, args)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cancel = args.Cancel&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Class&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;&amp;lt;InteropServices.ComImport(), InteropServices.Guid(&amp;quot;34A715A0-6587-11D0-924A-0020AFC7AC4D&amp;quot;), InteropServices.InterfaceTypeAttribute(InteropServices.ComInterfaceType.InterfaceIsIDispatch), InteropServices.TypeLibType(InteropServices.TypeLibTypeFlags.FHidden)&amp;gt; _&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Interface DWebBrowserEvents2&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;InteropServices.DispId(273)&amp;gt; _&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sub NewWindow3(ByVal pDisp As Object, ByRef cancel As Boolean, ByRef flags As Object, ByRef hostURL As Object, ByRef URL As Object)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Interface&lt;/p&gt;
&lt;p&gt;End Class&lt;/p&gt;
&lt;p&gt;Public Class WebBrowserExtendedNavigatingEventArgs&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Inherits CancelEventArgs&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Private _Url As String&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public Sub New(ByVal url As String)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_Url = url&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Sub&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Public ReadOnly Property Url() As String&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Get&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Return _Url&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End Get&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;End Property&lt;/p&gt;
&lt;p&gt;End Class&lt;/p&gt;
</description></item></channel></rss>