ChatGPT解决这个技术问题 Extra ChatGPT

Force "Internet Explorer 8" browser mode in intranet

There are "Internet Explorer 8", "Internet Explorer 8 Compatibility Mode", and IE7 mode in IE8.

However, the default setting in IE make all intranet website use "IE8 Compatibility Mode" even I have setted doctype, the meta tag, http header as suggested to force it into IE8 mode.

I have

and

But it still goes into "IE8 Compatibility Mode", without any changes in IE setting.

How to force it into pure "IE8" mode, without change any browser's setting?

PS. I am not talking "document mode" here.

Despite what some of the answers say, there is an easy fix for this as pointed out by Codex73: In Tools -> Compatibility Settings, uncheck the box which says "Display intranet sites in Compatibility View".
That may work for some, but that's not the programmatic answer that Dennis was looking for
How are you detecting which mode it is in?
Here is a very relevant new blog article from MSFT - blogs.msdn.com/b/cjacks/archive/2012/02/29/…

G
Glorfindel

Seem that MSFT has not consider a large intranet environment that we have many different web application running inside.

There is no way to bypass the IE8 setting, according to somewhere I read on MSDN forum.

So, I will have to beg my system administrators to put some new group policies to change "Compatibility View" setting and the value and prevent user change the value, until MSFT discover this bug and fix it.

From an MSDN blog post (emphasis theirs): "Browser Mode is chosen before IE requests web content. This means that sites cannot choose a Browser Mode."


Mmm... a -1 marked as the answer. I actually this is the correct answer, by default IE displays intranet sites as IE8 Compatibility Mode. You don't have to change all those options that Codex mentioned though. Just uncheck the 'Display intranet sites in Compatibility View' box from the Page->Compatibility View Settings Dialog. Yeah, a big pain, all the users will have to do. Dumb idea to default all websites to Compatibility and not provide a way to override it. (+1 so it's not -1 anymore)
X-UA-Compatible tag is supposed to override mode that browser would otherwise use, isn't it?
@Tuuka: yes, but it looks like X-UA-Compatible will not override the "Display intranet sites in Compatibility View" setting.
Or, to be more precise, X-UA-Compatible will override the document mode but not the browser mode
I added an MSDN reference that confirms the assertion that "there is no way to bypass the IE8 setting"
A
Andras Csehi

It is possible to override the compatibility mode in intranet. Just add the below code to the web.config. Worked for me with IE9.

<system.webServer>
<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=edge" />
  </customHeaders>
</httpProtocol>


(to clarify: It works for the document mode, but not browser mode)
This answer is for a .NET web site, since the asker didn't ask for a .NET solution it should be edited to be technology independent.
@Albireo: The tech-independent way to fix this is to set the X-UA-Compatible header. This answer shows how for IIS. For apache, check here: blogs.msdn.com/b/hanuk/archive/2008/08/28/…
As we're talking about intranets, may as well put in a caveat for SharePoint: It's best not to do this, as various bits of functionality will break in IE9. My blog contains more info on this: get-spblog.com/2012/05
The question is specifically about browser mode, not document mode. X-UA-Compatible does nothing to the browser mode. The answer is absolutely incorrect.
A
Adaline Simonian

You'll have to make some adjustments to IE.

Here they are.....

In Internet Options / Local Intranet / Sites

Under : Local Intranet inside Sites, uncheck "Automatically detect intranet network".

Then select only "Include all network paths (UNCs)

See attached screenshots

https://i.stack.imgur.com/U0gnD.png


Why would I have to make these adjustments. Please provide or link to an explanation of why security intranet settings have to be adjusted
here's your link to why: blogs.msdn.com/ie/archive/2008/08/27/… You can also disable compatibility mode for all intranet sites if that what's needed. here's another link: support.microsoft.com/kb/956197
Disabling compatibility mode for intranet sites is probably the more appropriate this solution, as this just stops intranet detection in general.
The fact that I have to uncheck "Include all local (intranet) sites not listed in other zones", while the "Automatically detect intranet network" is already unchecked, is awesome (or, in other words, antipattern of usability. The visual appearance suggests 2,3,4 apply only if 1 is selected).
Don't do this for SharePoint! It will break all sorts of core functionality. I think it might break WebDAV support and the ActiveX control for gridview, for example. It might also break Windows password authentication integration (specifically "remember my password"). You're much better off changing the compatibility view setting under the 'advanced' tab. As a more general rule, turning this off is going to break various bits of functionality that you seriously are going to want in an intranet. Basic stuff like reducing authentication prompts comes to mind. This is a "sledgehammer" solution
G
Glorfindel

I found the answers here hard to follow, so here's the important information in a nutshell:

If your intranet uses default settings for IE, IE7 Standards Mode is enforced for intranet sites regardless of any website settings.

From this:

Compatibility View and the Enterprise A large number of line-of-business websites are Internet Explorer 7 capable today. In order to preserve compatibility, Internet Explorer 8 ships with smart defaults based on zone evaluation. In the default state, all sites on the public internet display in Internet Explorer 8 Standards mode (Compatibility View off) and all intranet websites display in Internet Explorer 7 Standards mode (Compatibility View on). Let’s look at some examples. If you navigate to sites on your local intranet like http://myPortal and http://sharepoint/sites/mySite, Internet Explorer 8 identifies itself with a User Agent string of ‘7’, Version Vector of ‘7’, and displays webpages that trigger standards mode in Internet Explorer 7 Standards mode. This combination allows webpages that worked correctly in Internet Explorer 7 to continue to do so in IE8.


And you can easily disable this in Tools -> Compatibility Settings.
@humble coffee, "easily" is setting a non-standard X-UA-Compatible header. Managing local machine settings on a network strikes me as an exponentially difficult task.
@humblecoffee; alas it's not easy in a locked down corporate environment where a change such as this is forbidden.
C
Craig A

To override the Compatibility View settings for intranet or all websites you need to make IE8 emulate itself.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >

(to clarify: It works for the document mode, but not browser mode)
D
David Kolar

Set a custom HTTP header instead of using the <meta... in the <head> section. These are supposed to be equivalent, but I have seen that an X-UA-Compatible HTTP header from the server will override IE 8's "Display intranet sites in Compatibility View" setting, where the <meta... element would not.


unfortunately, it does not work. Checked the HTTP header has X-UA-Compatible: IE=8, but it still goes into "IE8 Compat" mode.
I have a better understanding of your question now. The Browser Mode is only going to influence the UA string and which Document Mode you end up in when no X-UA-Compatible is specified. So while the Document Mode can be changed, the Browser Mode cannot, I think. And this is not seen as a problem since it's the Document Mode that affects the page rendering. Is there a reason you need to change the Browser Mode, perhaps for some UA string sniffing? You've got me curious. Can you tell the difference without Developer Tools open?
David, some javascript behave not the same in two modes(and you can never find a full detail list), some of the IE specific feature are even disabled in real IE8 mode. That's why they are two modes, not one. When user use the same browser, I wish they see and run the same; not a same version, different browser nightmare.
I just found some more detail on the topic. blogs.msdn.com/b/ie/archive/2008/04/10/…
Additionally, the meta version is not valid HTML5; even MS suggests to use HTTP headers as @David Kolar advises: msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx
F
Francisco Goldenstein

If you are using .NET, I have the answer for you:

HTML:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=8" >

Web.Config:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=8" />
      </customHeaders>
    </httpProtocol>

voted up the -1 as this answer seems valuable to me and there was no explanation for it.
b
brunosp86

Read somewhere that the DOCTYPE declaration must be the very first line. No comments of any kind, nor empty lines.

In combination with setting the HTTP Response Headers, this worked for me. Browser Mode went from "IE9 Compatibility Mode" to just "IE9 Mode".


We are talking about IE8 though.
It is true that the DOCTYPE declaration must be the first line. A javascript include can go in front of it, but not other head elements. I voted up the -1.
Y
Yurok

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation IntranetCompatibilityMode 1-->0


I believe the OP was asking about server-side solutions, not client-side solutions.
D
Deborah

In order for the META declaration to work, the doctype has to be the simplified version:

<!DOCTYPE html>

Not the longer statement in Dennis' question.


This HTML header should be magicheader of HTML5. Which I guess is not supported by IE8?? Can anyone confirm?
This doctype DOES work in ie8, even though HTML5 features will not. Here's a good link: ejohn.org/blog/html5-doctype/#postcomment
R
Ray Brockman

This combo did the trick for me:

<!DOCTYPE HTML>
<HEAD>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
</HEAD>

at least IE developer tools reports IE9 Compat View, IE8 standards

just for kicks i tried EmulateIE7 and that worked as well. simplifying the extended !DOCTYPE was key.


Z
ZOXEXIVO

You need remove port number from your domain site name site:1180/index/

If browser see port number in url - hi "think", that's is intranet.

setup your dns server for friendly urls - site.com/index and it work OK


M
Magnilex

The answer marked as "correct" is technically correct but suggests that there is no solution to the real issue being faced by most people that is: "how do I properly show on IE8, with compatibility mode enabled, a web application which does not support compatibility mode?".

<!DOCTYPE HTML>
<HEAD>
    <meta http-equiv="X-UA-Compatible" content="Edge" >
</HEAD>

this worked for me on several workstations.

If the above code is implemented on application side, IE8 appears to behave as if it was not in compatibility mode, even though it will still show browser mode as compatibility mode.