What specific things cause IE8 to trigger compatibility mode?

mtyson picture mtyson · Jan 25, 2012 · Viewed 11.7k times · Source

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?

Answer

mtyson picture mtyson · Jan 28, 2012

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)