IE: Prevent confirming dialog box when using window.close() to close a main window
Been busying on investigating Dynamics CRM 4 Web Application and Outlook VSTO Add-In development for the past weeks and not update blog much. It's time to do a post now.
Little but useful trick when toying with IE windows.
When there is only a parent IE window and you load some pages with javascript "window.close();" that trying to close the window, in IE there will be a confirming dialog box asking if one really want to close the IE window. This often causes problems if you want to host your IE in a winform, and here are some simple and quick workaround to overcome this.
1: <HTML>
2: <HEAD>
3: <TITLE>Close window without prompt</TITLE>
4: <SCRIPT LANGUAGE="JavaScript">
5: <!--
6: function realClose()
7: {
8: var win=window.open("","_top","","true");
9: win.opener=true;
10: win.close();
11: }
12: //-->
13: </SCRIPT>
14: </HEAD>
15: <BODY>
16: Close window without prompt
17: <FORM><INPUT TYPE="button" VALUE="Close ME!" onClick="realClose()"></FORM>
18: </BODY>
19: </HTML>
The trick is to open an empty page in self window (the "_top"), and then close the opened window in javascript to fool IE that he is closing a child window. this worked without problems.
Further more, if you don't have ways to modify the page you are opening, thus not able to embed the realClose() function to the page, maybe in a WinForm that hosting a IE window and actually you don't know what page you are going to open, maybe this way would work.
1: <HTML>
2: <HEAD>
3: <TITLE>Close window without prompt</TITLE>
4: <SCRIPT LANGUAGE="JavaScript">
5: <!--
6: function realClose()
7: {
8: var win=window.open("","_top","","true");
9: win.opener=true;
10: //win.close();
11: win.realclosefunc();
12: }
13: window.realclosefunc = window.close;
14: window.close = realClose;
15: //-->
16: </SCRIPT>
17: </HEAD>
18: <BODY>
19: Close window without prompt
20: <FORM><INPUT TYPE="button" VALUE="Close ME!" onClick="javascript: window.close();"></FORM>
21: </BODY>
22: </HTML>
23:
in this way, when in WinForm, try to manipulate DOM of the hosting IE window, and try to insert the piece of code in the head part of page, then change the default window.close function to our self-made function to close the window. using this way won't need to do a string replacement of the downloaded html contents to replace window.close() to our close function. little bit tidy, but still doable...
For WinForm hosting pattern, using .net 2.0 WinForm WebBrowser control won't give you that magic WindowClosing event to prevent IE closing in your WinForm. There are articles introducing hooking DWebBrowserEvents2 interface to get this event working with WebBrowser control, but for no reason it just not working.
So I just tried to use COM Interop way to bridge the ActiveX IE control to .net by using aximp.exe command, and by doing this found that the WindowClosing event is working and able to detect the IE close before that confirming dialog box showed up, and then to cancel the IE close action inside the event and close my WinForm. this should be the easiest way to accomplish this task I think.
FYI.
Technorati Tags: microsoft,web,winform,windows,programming,windowclosing,com,interop,browser,control
Comments
Anonymous
October 17, 2008
The comment has been removedAnonymous
June 19, 2009
PingBack from http://mydebtconsolidator.info/story.php?id=18843Anonymous
March 25, 2012
Hi, I was trying to close the window without a confirmation message. Your solution worked for me. Thanks, VenkatAnonymous
January 02, 2014
Gracias, me ha funcionado correctamente. un saludo.Anonymous
April 15, 2014
Thx help fullAnonymous
August 04, 2014
Really helpfull. It worked for me. Thanks a lotAnonymous
October 30, 2014
Hi all, wow... it is working fine to suppress prompt on closing window using the below technique. function realClose() 7: { 8: var win=window.open("","_top","","true"); 9: win.opener=true; 10: win.close(); 11: } Thanks a ton. Regards, Pradip, 9322131271Anonymous
April 13, 2015
Thanks a lot. It worked for me as well..Anonymous
April 22, 2015
Thank you ..its working for meAnonymous
August 17, 2015
Hi all, works great in IE but Chrome and FF won't close the window/tab.