IE: Prevent confirming dialog box when using window.close() to close a main window

[Origin]: https://blogs.msdn.microsoft.com/rextang/2008/10/17/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.

Advertisements

View JSON in Internet Explorer 7-11

[Origin]: http://developers.de/blogs/holger_vetter/archive/2013/12/13/view-json-in-internet-explorer-7-11.aspx

Hello guys,

you all know the problem, want to debug an application with IE and IE always wants to download the JSON file.

The other browsers like Chrome or Firefox are doing a better job here.

If you want that IE shows the JSON file without downloading it, here is a registry fix for it.

Create a new text document and insert this (Link: http://pastebin.com/B0BXG0N6):

Windows Registry Editor Version 5.00;
; Tell IE 7,8,9,10,11 to open JSON documents in the browser on Windows XP and later.
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

Now rename the document to {FileName}.reg and save.

Run it and confirm the dialog.

Now JSON files will be shown directly in IE, without downloading.

*Thanks to Coding 101 from http://www.codeproject.com/Tips/216175/View-JSON-in-Internet-Explorer for the Script

Problems in IE11 with compatibility mode?

https://github.com/carhartl/jquery-cookie/issues/277

0x800a01b6 – JavaScript runtime error: Object doesn’t support property or method ‘addEventListener’

Oops, you’re right that was a copy paste error. However I trigger the compatibility mode via the Settings Icon -> Compatibility View Settings -> Add the site in there.

From there on he doesn’t show the div whereas without the comp mode it works without any problems.

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

is set.

“Object doesn’t support this property or method” error in IE11

http://stackoverflow.com/questions/18829292/object-doesnt-support-this-property-or-method-error-in-ie11

Best way to solve this until a fix is available (if a fix comes) is to force IE compatibility mode on the user.

Use

<META http-equiv="X-UA-Compatible" content="IE=9>

ideally in the masterpage so all pages in your site get the workaround.

shareedit
2
This works, just tested with IE11, I added it to the _Layout.cshtml page –  Manny Mar 27 at 16:37

http://stackoverflow.com/questions/24533729/jquery-2-1-1-in-ie9-get-error-0x800a01b6-microsoft-jscript-runtime-error-obj

You can add below code in your web config file for setting document mode:

<system.webServer>
  <httpProtocol>
    <customHeaders>
     <add name="X-UA-Compatible" value="IE=EmulateIE9">
    <customHeaders>
 <httpProtocol>
<system.webServer>
shareedit