I frequently get asked about IE8 compatibility.  I usually point people to the IE8 Readiness Toolkit’s developer section.  This is a good resource but there are various topics and resources that I’d like to summarize in this post.

Three Browsers for the Price of One

If you’re in the browser business, you need to balance implementing new standards and not breaking legacy websites.  Over the years, this was handled using quirks mode.  This works in most cases but is tricky because different browsers handle quirks mode differently.

IE8 enhances this by having three ways of rendering content – IE 8 Standards, IE 7 Standards, and Quirks mode . The choice of how the page is rendered can be controlled at the client or at the server.

For more info, see: IEBlog; Defining Document Compatibility; IE8 Readiness Toolkit: Versioning; IE8 Readiness Toolkit: Compatibility

New Browser = New User Agent String

When a new IE version released, the user agent string is updated to reflect the browser’s version.  Some websites use the user agent string to detect the browser and decide what content to display.  If you’re wondering what user agent string you are sending to websites, you can type the following into IE’s address bar:

javascript:alert(navigator.userAgent)

On my Windows 7 machine, my user agent string is:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8)

If I turn on compatibility view, my user agent string is:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8)

If your site uses the user agent string to make decisions on what to display, you may have issues with your web site.

For more info, see: Understanding User-Agent Strings; IE8 Readiness Toolkit: Versioning; Cookbook: User Agent String

Loosely Coupled Internet Explorer (LCIE)

IE7 on Vista defaulted to low integrity level protected mode when you browsed to a site. If you browsed to a trusted site, IE would display a message and open another instance of IE that ran at a medium integrity level.  This wasn’t the best user experience.

To avoid the poor user experience, IE8 introduced LCIE.  This separates the IE frame from the tabs. Tabs can be serviced in different iexplore processes.  This solves the user experience problem with trusted and non-trusted sites while still providing isolation.  This also improves stability and performance of IE.

What’s the Compatibility Impact?

To improve compatibility, IE8 runs all sites in the Intranet zone with protected mode off.  In most cases, this helps with internal website compatibility. However, it is a behavior change from Vista and is worth noting.

If you develop IE add-ons, LCIE may affect you.  See the IE8 Readiness Toolkit – LCIE section for more info.

Data Execution Protection (DEP/NX) is on by default

DEP/NX mitigates memory-related vulnerabilities. An application or ActiveX control that runs in Internet Explorer and is not compatible with DEP/NX will crash on startup. IE may crash on startup if add-ons not compatible with DEP/NX are installed.  This is common with older versions of the ATL library which are not DEP/NX compatible.

For more info, see: IEBlog; IE8 Readiness Tookit: DEP/NX; Cookbook: DEP/NX

Anything Else?

Yes, there’s more.  I didn’t cover everything.  The goal of this post was to talk about some of the changes in IE8 that impact compatibility and point you to some really good resources to find information.

Here are my favorite resources for IE8 compatibility: