I’ve been working on an MFC project which embeds a basic web-browser component in a dialog. It does this using a Microsoft Web Browser ActiveX component. The control should hook into whatever version of Internet Explorer (IE) is running on the system. However, it always seemed to fall-back on IE7 emulation mode for me, meaning a lot of modern standards-compliant HTML wasn’t being displayed properly.
I was able to fix this by setting a registry key.
Registry value
You can modify this emulation behaviour by adding a registry value, telling the component which version of IE to emulate for a given executable. It can either go under HKEY_LOCAL_MACHINE
or HKEY_CURRENT_USER
, at the following location for a 32-bit system:
Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
Or this location on a 64-bit system:
Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
Add a new DWORD
with the same name as your executable (e.g. “myprogram.exe”). The value of the DWORD
identifies which browser version to use:
Desired IE version | DWORD value (decimal) | DWORD value (hex) |
---|---|---|
IE7 | 7000 | 0x1B58 |
IE8 | 8000 | 0x1F40 |
IE9 | 9000 | 0x2328 |
IE10 | 10000 | 0x2710 |
IE11 | 11000 | 0x2AF8 |
The trend is pretty obvious here. Presumably IE12 (if there is one) will be 12000 (decimal), and so on. I’d advise against putting in a value higher than you can currently test though as it could have unexpected side effects in future.
It’s important to note that this only affects the default document mode. If a page contains non-standard quirks then the browser’s compatibility mode may come into play. That could cause the emulation to drop back to a previous version. The best way to prevent this is to use up-to-date standards-compliant HTML and CSS.
Limitations
Since the registry key is specified only by the program name (not the path), there is obviously scope for conflicts here. For example, if two different pieces of software both call their main executable “app.exe” then there is no way to distinguish between them in the registry setting. This could be a particular problem if you expect your users to have multiple versions of your software at the same time.
I haven’t found a way round this, so my only advice is to make sure you use unique executable names.
Support on older systems
Older systems such as Windows XP can’t run the more recent versions of Internet Explorer. However, the registry codes above will still work. As far as I can tell, the ActiveX control just uses the latest version of IE it can find, up to and including whatever you specify in the registry setting.
For example, if a user only has IE8 on their system, it won’t cause a problem if you specify the code for IE11 in the registry. The ActiveX control will happily use IE8 instead.