Basically, IE attempts to find the best compatibility mode first before rendering the page with the newest version of its engine, IE10 in your case. But before, IE more or less follows the given flow:
- Checks if there is the meta-tag in the header of the page:
<meta http-equiv="X-UA-Compatible" content="IE=IEX" />, where "X" is either 7, 8, or 9. When a page includes this meta it instructs IE to display it with the standards mode of the given browser version, which means that it will use the standard engine of that version. - Checks if the content of this meta-tag is something like
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIEX" />, agian, where "X" is either 7, 8, 9. This instruction is for displaying the page with the compatibility mode of the given browser. The difference from the standards mode is that here you basically tell him to use the compatibility engine of that version. It may be useful if you want to display a page as if it were Internet Explorer 5.5, by specifying (IE=Emulate7), since IE7 compatibility mode made it possible to display old legacy pages designed for IE 5.5 - If no
X-UA-Compatiblemeta tag is found, the browser renders the page with the newest engine, UNLESS you explicitly chose to load it in compatibility mode... I think that it's your case, because let's face it 99.9999999999999999999% web pages do not specify any compatibility mode :-)
To sum it up, IE either uses the standard mode of the specified engine, OR it completely emulates the rendering of the page with a previous engine, thus allowing for legacy pages to be displayed properly. Since they use a different engine, it may explain why a plugin works in one case and does not in another.
For much more detailed information, check the MSDN article on that subject.
Edit: found that practically the same question is available in Pro Webmasters SEPro Webmasters SE!