In specify IEBlog :
"Browser mode" affects the user agent string, the version vector used when evaluating conditional comments and the rendering mode.
This is described in detail at http://msdn.microsoft.com/en-us/library/dd565624(VS.85).aspx .
As you can see clearly, you still cannot influence all these things: by the time you tell the browser to act like IE7, it is already acting like IE8.
Perhaps the real question is: Why is browser mode so important to you? Document mode is what bothers you the most - everything that the browser mode changes as long as those related to rendering are related to what is excluded / enabled but verified by the version, and users will still not search in the developer tools therefore they don’t care.
Instead of spending a lot of time making it look like a clean compatibility mode in the developer tools, you should go and make sure that the user agent string check and conditional comments make it so that IE7 and IE8 get the same stuff to work with, then leave EmulateIE7 in.
EDIT:
The problem is checking your version, and as I said below, I will tell you where the problem is.
If you use the developer tools to debug the placement of the script menu, you can dig and see that the execution path for get_x_position is different when the browser reports itself as IE7 or IE8: is_ie5up set to true for IE7 mode and false for IE8 mode. This results in a return of very different values.
At this point, we should go back to where this variable is set:
var is_ie5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4));
As you can see, this depends on the value of is_ie6up , so let's look at the surrounding code ...
var is_ie8up = (is_ie8 || is_ie9up); var is_ie7up = (is_ie7 || is_ie8up); var is_ie7up = (is_ie7); var is_ie6up = (is_ie6 || is_ie7); var is_ie5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4)); var is_ie5_5up = (is_ie6up || (is_ie && !is_ie3 && !is_ie4 && !is_ie5));
... did you notice a flaw (hint: compare lines 2 and 4 of this snippet)?
This right: is_ie6up not set to true if the browser is not exactly IE6 or IE7. The correct line should of course read
var is_ie6up = (is_ie6 || is_ie7up);
... but wait. This is also not good, because line 3 of the fragment changes is_ie7up only like this: true, if the browser is exactly IE7! So, you need to delete the is_ie7up overwrite and fix the is_ie6up setting.
I assume that you have the EXACT same problem on another site: you have mixed up browser checks in much the same way.