Internet Explorer 9
It is important to note that even though Microsoft will continue to support Windows XP until 2014, Internet Explorer 9 is not available for Windows XP, and is only available for Windows Vista and later. Users of earlier operating systems will either be stuck with Internet Explorer 8 (or earlier), or can switch to alternative browsers which continue to be supported.
Summary of the changes
The Internet Explorer 9 is available, and for once it seems that an attempt has been made to make a jump in standards support. It is still behind most other browsers (that's nothing new), but many popular standards have now been implemented, allowing pages to be written with less reliance on code branching for IE's non-standard APIs. Several CSS 3 advances have been made, and several missing DOM 2 and 3 modules have finally been implemented according to the standards, in addition to the existing non-standard versions. A few new items from HTML 5 have also been added, along with basic support for SVG.
As always, most of these enhancements are only available in standards rendering mode. While this may partially make sense for CSS features, it is problematic for JavaScript features. Generic scripts that are designed to work on any page (from simple scripts to downloadable libraries such as jQuery) cannot rely on any of the new features, even if they do not need to cater for IE 8-, because on a quirks mode page IE 9+ will intentionally drop support for those features. In addition, if the user enables compatibility view on any Web site (this is enabled by default on all intranet sites), IE 9 reverts to IE 7 rendering for that site, and once again drops support for all of the new enhancements. Generic scripts may also be used on a number of intranet sites, and will need to cope with this as well.
The main changes are as follows:
- Added support for the following DOM modules:
- DOM 2 (and partial 3) events, including capturing and passing event objects to handler functions, and even DOMContentLoaded and mutation events
- DOM 2 Style Sheets
- DOM 2 Views (all nothing of it)
- DOM 2 Traversal and Range
- Largely completed support for most other DOM 2 modules, such as adding namespace-aware methods from DOM 2 core.
- Added support for DOMParser and XMLSerializer (removed from DOM 3 Load and Save, but widely supported).
- Added support for the pageXOffset, pageYOffset, innerWidth, innerHeight, outerWidth and outerHeight properties of the window object.
- Added support for new JavaScript methods from ECMAScript 5, but without most of the Object extensions.
- Added support for the following CSS 3 modules:
- CSS 3 Media Queries
- CSS 3 Selectors, including the double colon syntax for generated content
- CSS 3 Backgrounds and Borders (without vendor prefix), including box shadow
- CSS 3 Color (including opacity)
- CSS 3 2D Transforms (with -ms- vendor prefix)
- Web Fonts now support TTF/OTF fonts, as long as the font files have the right permissions, so the same font files can be used as with other browsers.
- Added XHTML support, with namespaces, parsing, and mimetype - parsing errors are not made obvious, and the page is simply displayed truncated to the point where the error occurred.
- Added support for SVG 1.1 and 1.2 Tiny without animation.
- Added support for the following HTML 5 features:
- HTML 5 video and audio (H.264 is supported by default, with WebM apparently only supported if the user has installed the VP8 codec)
- HTML 5 embedding of foreign content markup like SVG directly into HTML
- HTML 5 canvas
- The window/document.getSelection API.
- The setSelectionRange, selectionStart and selectionEnd properties on input/textarea elements.
- Basic support for the section, nav, article, aside, hgroup, header, footer and figCaption elements (which all act as block elements like a div), the figure element (which is a block with left and right margin), and the mark element (an inline element with a yellow background).
- Added support for the Geolocation API.
- Removed text/plain sniffing, so they are no longer misdetected as HTML files.
- Whitespace nodes no longer go missing from the DOM.
- Event handler attributes can now be set with setAttribute.
- Style properties can now be set to unknown values.
- Class and title now appear to work correctly with attribute selectors.
- Generated content now correctly inherits font-size.
- Removed support for the non-standard alpha filter (used to make up for lack of native opacity support).
- Object tags no longer show scrollbars on normal images, but may still do so with SVG images.
There are still some frustrating oversights, of course, and lingering signs of rushed implementations that have failed to cover useful cases:
- DOM 3 XPath is still missing (XPath is only supported in XSLT, as before).
- The navigator.plugins collection is still not implemented in any useful way.
- Selectors API is still not available on document nodes that are not the main document (like XMLHttpRequest.responseXML).
- Still no text shadow support.
- Table elements (and related elements like TD) still cannot use block display, and treat it as return-to-default.
- Data URIs are still crippled.
- Still no support for navigational link tags.
- Old bugs like the inability to wrap on spaces before a punctuation character (since IE 5) are still present.
You may notice that most of the additions are things that are tested by Acid 3 - while it is nice to know that Acid 3 can have that influence, it would also be nice for the other important things that were not tested in Acid 3 to get some attention. It would also be nice not to have to produce high profile tests like Acid 3 just to encourage the dominant browser's vendor to start implementing standards which they themselves contributed to (most of the DOM 2 modules were ready for implementations 12 years ago) - oh well. Its score on Acid 3 is currently the lowest of all major browsers, but far higher than it was in IE 8. At the time of release, the score was higher than that of Firefox's public 3.6 release, but slightly lower than Firefox 4 beta. Opera and Safari (and therefore other WebKit browsers like Chrome) passed the standards parts of the test a number of years beforehand.
Running IE 9 and IE 8 or IE 7 on the same computer
The IE 9 install overwrites the IE 7 or IE 8 install. It is possible to use IETester to test previous versions. IE 9 has the menu item and button "Compatibility view" to switch it into IE 7 mode, which is close to a real IE 7 install, but not perfect. A few of the IE 9 script properties still exist, and a few little CSS differences are present. Still, it is not a bad approximation. For now, this is the best approach. It does not seem to be possible to run IE 8 on computers where IE 9 is installed. For testing in IE 8, open the developer tools (F12), and use the menu to set the browser mode to IE 8 (or 7). Like the IE 7 compatibility mode, this will not be perfect, as certain new methods, properties, and CSS values may still exist.