IE8 compatibility mode button missing - html

I'm developing a website using Umbraco and I'd like to flick between IE8 and IE7 using the compatibility button, but it's hidden. It is an internal address but I've not had the problem with similar sites on the same server. (The only difference is this is using a 'non-standard' port 8080, I shouldn't think that would make a difference?)
I've checked the following blog post; Compatibility View Button Missing in IE8
Which states,
The Compatibility View button will be missing for the following
reasons,
If you’re viewing any webpage and you have the ‘Display all websites
in Compatibility View’ checkbox selected in Tools > Compatibility View
Settings.
If you’re viewing a webpage that is included on the
Microsoft-supplied compatibility view updates list and you have the
‘Include updated website lists from Microsoft’ checkbox selected in
Tools > Compatibility View Settings,
If you’re viewing an intranet page and you have the ‘Display intranet sites in
Compatibility View’ checkbox selected in Tools > Compatibility View Settings.
If you’ve toggled either the ‘Document Mode’ or ‘Browser Mode’ settings
via the Developer Toolbar.
If you’re viewing a page that has declared it’s “ready” for Internet Explorer 8.
My site/browser settings don't fall into any of these categories so I can only presume there's more factors involved.
I'm using the following DOCTYPE in all of my pages,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
I can force IE to render using the latest version by including,
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
But this doesn't give me the functionality to switch browser modes via the button.

this is to make html5 to work in IE8,9
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" type="text/javascript"></script>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/ie7-squish.js" type="text/javascript"></script>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
<![endif]-->
Hope this will help

If you are indeed including this tag in your page
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
then that is why the button is missing. You've communicated to IE that the site is (supposedly) compatible with its standards rendering mode. Hence it will not display a button to the user for compatibility mode because that would (supposedly) allow the user to accidentally switch the rendering mode, potentially mangling the visual layout of your site.
Ironically, I've often had the opposite problem. The button frequently shows up when I don't want it to. The criteria for whether or not it shows up seems very finicky. Should you every want the opposite behavior (no button being present) I recommend making the above meta tag the first tag of your header.

Related

How to prevent IE from opening my page in compatibility mode?

I have this html/jsp page:
<%#page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html ...
</html>
which, for some reason, is opened by default in compatibility mode on IE (in my case version 10) and this messes up everything as it just does not understand some modern constructs present in libraries such as angularjs.
By opening developer's tools and changing the view mode to "standard IE" everything fixes up and my web application works fine.
So, what's wrong with this header? Is there a way to force IE to open my page in normal mode?
This question is more or less the same of this one, I know that:
Why Does IE-8 push the view to Compact/Compatibility view?
but I don't want to force my user to open tools and set options like correct marked answer suggests: most of them are just ignorant, many of them have developers tools disabled on their company's PC.
In the end just want to see where's the problem with my web application and make so that IE accepts it as a normal page.
insert meta tag in header HTML:
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
The "edge" forces standards mode (or latest rendering engine) in IE.
To force IE8 to standard mode.
<meta http-equiv="x-ua-compatible" content="IE=8">

How to force IE10 to render page in IE9 document mode

I have two questions:
How can I force IE10 to render in IE9 document mode? Currently it's rendering my page in Standard document mode.
In IE10's developer toolbar, I am not able to see the option of document mode of IE10. Is it not implemented, or is my browser version is out of date?
Thanks for all your help.
Edit: thanks everyone for the solutions provided. Earlier I was using a meta tag
<meta http-equiv="x-ua-compatible" content="IE=edge" >
just to make sure that IE will render the page in highest document mode, but I was facing some issues with IE10 standard mode, so I changed the meta tag to render the page in IE9 mode:
<meta http-equiv="x-ua-compatible" content="IE=9" >.
You should be able to do it using the X-UA meta tag:
<meta http-equiv="X-UA-Compatible" content="IE=9" />
However, if you find yourself having to do this, you're probably doing something wrong and should take a look at what you're doing and see if you can do it a different/better way.
Do you mean you want to tell your copy of IE 10 to render the pages it views in IE 9 mode?
Or do you mean you want your website to force IE 10 to render it in IE 9 mode?
For the former:
To force a webpage you are viewing in Internet Explorer 10 into a particular document compatibility mode, first open F12 Tools by pressing the F12 key. Then, on the Browser Mode menu, click Internet Explorer 10, and on the Document Mode menu, click Standards.
http://msdn.microsoft.com/en-gb/library/ie/hh920756(v=vs.85).aspx
For the latter, the other answers are correct, but I wouldn't advise doing that. IE 10 is more standards-compliant (i.e. more similar to other browsers) than IE 9.
You can tweak the Registry if you want to make changes only to your own system. If you have IE10 and lots of web sites you visit don't render properly in IE10, then you can tweak your registry to force IE to open in IE9 mode.
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
Create a DWORD as iexplore.exe and give value 9999. Restart your IE and it will open in IE9 mode :)
Thanks to my colleague Sreejith D :)
I haven't seen this done before, but this is how it was done for emulating IE 8/7 when using IE 9:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
If not, then try this one:
<meta http-equiv="X-UA-Compatible" content="IE=9">
Add those to your header with the other meta tags. This should force IE10 to render as IE9.
Another option you could do (assuming you are using PHP) is add this to your .htaccess file:
Header set X-UA-Compatible "IE=9"
This will perform the action universally, rather than having to worry about adding the meta tag to all of your headers.
By what this says, IE10 (the article is referred to a preview release, anyway) it's able to use X-UA-Compatible only if the document is in quirks mode (no DOCTYPE), otherwise IE10 won't react to the request.
Here's an excerpt:
Thus, to make IE10 react to the X-UA-Compatible directive, one must either create a page that triggers quirks-mode per the rules of HTML5 (that is: an a page with no doctype). One can also send the directive as a HTTP header, however: A HTTP sent directive appears to have no effect if you use it to downgrade the rendering — it can only be used to upgrade the rendering
So, you've to do it manually with Dvelopers Tools, or with quirks mode (but I suggest to stay in IE10 mode which is for the first time aligned to the other browers' standard)
EDIT: The follows are some useful link to read:
http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx
http://blogs.msdn.com/b/ie/archive/2011/12/14/interoperable-html5-quirks-mode-in-ie10.aspx
You can force IE10 to render in IE9 mode by adding:
<meta http-equiv="X-UA-Compatible" content="IE=9">
in your <head> tag.
See MSDN for more information...
there are many ways can do this:
add X-UA-Compatible
tag to head
http response header
using IE tools F12
change windows Registry
The hack is recursive. It is like IE itself uses the component that is used by many other processes which want "web component". Hence in registry we add IEXPLORE.exe. In effect it is a recursive hack.
I found this post while I was looking for a solution to my DNN6 website.
The error was
SCRIPT5007: Unable to get property 'documentElement' of undefined or
null reference
But I needed the same solution: force compability mode to IE9. So let me share with you what I did to solve this.
So, for DotNetNuke 6 users try the StyleHelper SkinObject
Worked great for me!

Why can't I use HTML5 when deployed locally or in intranet?

I have an ASP.NET site that is using Twitter Bootstrap, and everything looks great when I'm running locally, but when I deploy locally or to our test environment, all HTML5 elements seem to be ignored. I have a DOCTYPE that should allow me to use HTML5:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
How can I get this to work?
IE will, by default, check to see if a site is in your intranet, so that it can apply intranet security to your browsing. Another great feature is that it defaults the document compatability mode to IE7 for intranet sites - and IE7 isn't great at HTML5. You can see this if you hit F12 and pull up Developer Tools (Document Mode at the top).
So, the good news is, this is only an issue in intranet - once you deploy to your production server, you shouldn't encounter this issue anymore. The bad news is that proper testing is difficult while this behavior is in effect.
You can, of course, change your IE settings not to detect intranet sites automatically. However, for a more scalable solution, you can include this meta tag in your pages in order to force a higher compatability mode:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Reference in comments of this article.

Force IE9 to emulate IE8. Possible?

Is this possible at all?
I tried adding this to the page but it didn't change a thing.
<meta http-equiv="X-UA-Compatible" content="IE=8">
UPDATE- I'm trying to do this because our site has some IE9 specific CSS issues, which wouldn't appear in IE8.
Thanks
You can use the document compatibility
mode to do this, which is what you
were trying.. However, thing to note
is: It must appear in the Web page's
header (the HEAD section) before all
other elements, except for the title
element and other meta elements Hope
that was the issue.. Also, The
X-UA-compatible header is not case
sensitive Refer:
http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx#SetMode
Edit: in case something happens to kill the msdn link, here is the content:
Specifying Document Compatibility Modes
You can use document modes to control the way Internet Explorer
interprets and displays your webpage. To specify a specific document
mode for your webpage, use the meta element to include an
X-UA-Compatible header in your webpage, as shown in the following
example.
<html>
<head>
<!-- Enable IE9 Standards mode -->
<meta http-equiv="X-UA-Compatible" content="IE=9" >
<title>My webpage</title>
</head>
<body>
<p>Content goes here.</p>
</body>
</html>
If you view this webpage in Internet Explorer 9, it will be displayed
in IE9 mode.
The following example specifies EmulateIE7 mode.
<html>
<head>
<!-- Mimic Internet Explorer 7 -->
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
<title>My webpage</title>
</head>
<body>
<p>Content goes here.</p>
</body>
</html>
In this example, the X-UA-Compatible header directs Internet Explorer
to mimic the behavior of Internet Explorer 7 when determining how to
display the webpage. This means that Internet Explorer will use the
directive (or lack thereof) to choose the appropriate
document type. Because this page does not contain a
directive, the example would be displayed in IE5 (Quirks) mode.
Yes. Recent versions of IE (IE8 or above) let you adjust that. Here's how:
Fire up Internet Explorer.
Click the 'Tools' menu, then click 'Developer Tools'. Alternatively, just press F12.
That should open the Developer Tools window. That window has two menu items that are of interest:
Browser Mode. This setting determines the value of the user-agent header sent for every request.
Document Mode. This setting determines how the rendering engine renders the page.
More at http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for-site-developers.aspx
The 1st element as in no hard returns. A hard return I guess = an empty node/element in the DOM which becomes the 1st element disabling the doc compatability meta tag.
On the client side you can add and remove websites to be displayed in Compatibility View from Compatibility View Settings window of IE:
Tools-> Compatibility View Settings

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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
and
<meta http-equiv="X-UA-Compatible" content="IE=8" >
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.
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."
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>
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
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.
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" >
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.
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>
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".
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation
IntranetCompatibilityMode 1-->0
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 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.
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
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.