Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What specific things cause IE8 to trigger compatibility mode?

I've got an app that under some circumstances causes IE8 to popup the compatibility message and reload in compat mode:

a problem displaying caused internet explorer to refresh the webpage using compatibility view

This is rare, and does not occur due to the meta-tags, as far as I can tell. It happens as a response to user action that alters the DOM. This is the same problem as: https://superuser.com/questions/215281/how-do-i-stop-i-e-jumping-into-compatability-view, but my question is: What types of things cause this, as an aid in fixing it.

Put another way, see this site thesitewizard.com, where a third cause of compatibility mode in IE8 is described as:

and, on occasion, for some other unfathomable, undocumented reason, on pages that are validated as standards-compliant (or, at least, it does this in Release Candidate 1).

And the question is: What unfathomable, undocumented reasons?

like image 253
mtyson Avatar asked Jan 25 '12 17:01

mtyson


People also ask

How do I force compatibility mode in ie11?

Open up Internet Explorer (IE 11) Press the Alt key on your keyboard, this will make a menu bar appear. Click on the Tools menu tab. Select the Compatibility View settings option.

How do I change Internet Explorer to standard mode?

In your Internet Explorer web browser, press F12 to open the Developer Tools window. Click Browser Mode and select the version of your web browser. Click Document Mode, and select the Internet Explorer standards for your Internet Explorer release.


2 Answers

After a long debugging session (using old school alerts to pinpoint what was failing where), this seemingly innocous line of dom manipulation was the culprit:

document.getElementById("literal"+varValue).style.display = "none"; 

There was no error here, and the element was apparently found (ie, this is not a garden variety null pointer).

This is a large scale app, and there is a lot going on around this code. I switched it to the following, and this apparently has prevented the issue:

setTimeout(function(){            var layoutEl = document.getElementById("literal"+varValue);            if (layoutEl)                layoutEl.style.display = "none";        },10) 
like image 125
mtyson Avatar answered Oct 06 '22 04:10

mtyson


The following content comes from an MSDN article "Controlling default rendering".


Be aware that certain conditions, like those listed here, can force Internet Explorer to display pages in a document compatibility mode different from the one specified in the webpage.
  • Compatibility View is enabled for the page.
  • The page is loaded in the Intranet zone and Internet Explorer is configured to use Compatibility View for pages loaded from the Internet zone.
  • The page is loaded from the user's local file system (which means the page is loaded in the Intranet zone) and Internet Explorer is configured to use Compatibility View for pages loaded from the Internet zone.
  • Internet Explorer is configured to display all websites in Compatibility View.
  • Internet Explorer is configured to use the Compatibility View List, which specifies a set of websites that are always displayed in Compatibility View.
  • The Developer Tools are used to override the settings specified in the webpage.
  • The webpage encountered a page layout error and Internet Explorer is configured to automatically recover from such errors by reopening the page in Compatibility View.
  • The page contains a Mark of the Web that directs it to be loaded in a particular zone.

These links provide additional info that describes how Internet Explorer determines the appropriate document mode for a webpage:

  • Internet Explorer Blog: Compatiblity Features for Site Developers
  • Internet Explorer Blog: Compatibility View Recap
  • Internet Explorer Standards Support Overview, Section 2.1.2: Document Modes
like image 24
jessegavin Avatar answered Oct 06 '22 05:10

jessegavin