суббота, 27 октября 2012 г.

IE10 on Windows 7 available in November


As we approach general availability of Windows 8, we want to provide an update on IE10 for Windows 7. We will release a preview of IE10 on Windows 7 in mid-November, with final availability to follow as we collect developer and customer feedback.
IE10 on Windows 7 has the same standards based platform for developers to target as IE10 on Windows 8. We built an entirely new browser with Windows 8, with more performance and developer capabilities. IE10 brings improved real-world site performance and additional standards support to Windows 7 that Web developers have been asking for. We look forward to getting your feedback on IE10 on Windows 7, and will provide another update when the preview is available.
—Rob Mauceri, Group Program Manager, Internet Explorer

Web Performance: When millisecond resolution just isn’t enough


Sometimes measuring time in millisecond resolution just isn’t accurate enough. Together with industry and community leaders, the W3C Web Performance working group has worked to solve this problem by standardizing the High Resolution Time specification. As of this week, this specification has been published as a Proposed Recommendation (PR) and is widely adopted in modern browsers. Take a look at the What Time is it? test drive demo to see how this API works.
This specification has gone from just an idea to PR in eight short months. The PR stage of standardization is the final step before a Web standard becomes an official W3C Recommendation. Additionally, this interface has been broadly adopted in browsers, including full support in Internet Explorer 10 and Firefox 15, and supported with a prefix in Chrome 22. This is a great example of what’s possible when the industry and community come together through the W3C.
So why aren’t milliseconds good enough? Time has long been measured in the Web platform using some form of the JavaScript Date object, whether it is through the Date.now() method or the DOMTimeStamp type. The Date object represents a time value as time in milliseconds since 01 January, 1970 UTC. For most practical purposes, this definition of time has been sufficient to represent any instant to within 285,616 years from 01 January, 1970 UTC.
For example, at the time of writing this blog, my Date.now() time value from my IE10 Developer Tools Console was 1350509874902. This thirteen digit number represents the number of milliseconds from the origin of this time base, 01 January, 1970. That time corresponds to 17 Oct 2012 21:37:54 UTC.
Though this definition will continue to be genuinely useful for determining the current calendar time, there are some cases where this definition is not sufficient. For example, it is useful for developers to determine if their animation is running smoothly at 60 frames per second (one frame painted every 16.667 milliseconds). Using the simple method of calculating the instantaneous FPS by measuring when the frame drawing callback was last made, one can only determine FPS to 58.8 FPS (1/17) or 62.5 FPS (1/16).
Similarly, sub-millisecond resolution is also desirable when accurately measuring elapsed time (e.g., using the Navigation Timing, Resource Timing and User Timing APIs to instrument your network and script timing) or when attempting to synchronize animation scenes or audio with animation.
To solve this issue, the High Resolution Time specification defines a new time base with at least microsecond resolution (one thousandth of a millisecond). To reduce the number of bits used to represent this number and to increase readability, instead of measuring time from 01 January, 1970 UTC, this new time base measures time from the beginning of navigation of the document, performance.timing.navigationStart.
The specification defines performance.now() as the analogous method to Date.now() for determining the current time in high resolution. The DOMHighResTimeStamp is the analogous type to DOMTimeStamp that defines the high resolution time value.
For example, looking at the current time using performance.now() and Date.now() in the IE10 Developer Tools Console at the time of writing this blog, I see the following two values:
performance.now():           196.304879519774
Date.now():        1350509874902
Even though both of these time values represent the same instance in time, they are being measured from a different origin. The performance.now() time value definitely feels more readable.
As High Resolution Time is measured from the start of a document’s navigation, performance.now() in a sub-document will be measured from the start of navigation of the sub-document, not the root document. For example, suppose a document has same-origin iframe A and cross-origin iframe B, where a navigation occurred in iframe A about 5 milliseconds after the start of navigation of the root document and in iframe B about 10 milliseconds after the start of navigation of the root document. If we measure the exact moment of time 15 milliseconds after the start of navigation of the root document, we would get the following values for performance.now() calls in the different contexts:
performance.now() in iframe B:                                5.123 ms
performance.now() in iframe A:                               10.123 ms
performance.now() in root document:                    15.123 ms
Date.now() in any context:                         134639846051 ms
Figure illustrating the difference of how Date.now() measurement compares with performance.now()
Figure: Date.now() is time measured since 01 January 1970, whereas performance.now() is time measured since the start of the document navigation
This design not only ensures there is no data leakage on the time of creation of the parent in cross-origin iframes, it also allows you to measure time relative to your start. For example, if you were using the Resource Timing interface (which uses High Resolution Time) to determine how long it takes for a server to respond to a resource request in a sub-document, you wouldn’t need to make adjustments to take the time of adding the sub-document to the root document into account.
If you wish to do cross frame time comparisons, you would just need to request top.performance.now() to get a time value relative to the root document’s start of navigation, which would return the same value in all same-origin iframes.
Another significant benefit of this API over Date.now() is that performance.now() is monotonically increasing and not subject to clock skew or adjustment. The difference between subsequent calls to performance.now() will never be negative. Date.now() doesn’t have such a guarantee and in practice we have heard of reported cases where negatives time have been seen in analytics data.
High Resolution Time is another great example of how quickly new ideas can become interoperable standards that developers can depend on in modern HTML5-enabled browsers. Thanks to everyone in the W3C Web Performance Working Group for helping design this API and to other browser vendors for rapidly implementing it with an eye towards interoperability.
Thanks,
Jatinder Mann
Internet Explorer Program Manager

W3C Web Performance Workshop


The W3C Web Performance Working Group is looking for new use cases and performance issues to solve in its next chartered period. To that effect, the Working Group is holding a public workshop on November 8, 2012, in Mountain View, CA where performance experts and Web developers are invited to present ideas and discuss current challenges. Statements of interest will be the basis of the discussion at the Workshop and must be submitted by October 29th to this mailing list.
Fast HTML5 Web applications benefit consumers who browse the Web and developers building innovative new experiences. Just over two years ago, the W3C announced the formation of the Web Performance Working Group chartered with two goals: making it easier to measure and understand the performance characteristics of Web applications and defining interoperable methods to write more CPU- and power-efficient applications.
Over the course of these two years, together with Google, Mozilla, Facebook, and other industry and community leaders who participate in the W3C Web Performance Working Group, the working group has designed and standardized eight interfaces that are now widely adopted in modern HTML5-enabled browsers: Navigation TimingResource TimingUser TimingPerformance TimelinePage VisibilityTiming control for script-based animationsHigh Resolution Time and Efficient Script Yielding. These APIs are supported in Internet Explorer, Firefox, and Chrome, and are great examples of how quickly new ideas can become interoperable standards that developers can depend.
If you are interested in sharing feedback to the Working Group and cannot attend the workshop, you can do so by completing thissurvey. The deadline for the survey is November 2nd.
Thanks,
— Jatinder Mann, Program Manager, Internet Explorer

воскресенье, 21 октября 2012 г.

Building World-ready Applications in JavaScript Becoming a Reality


We consistently hear from developers that today’s JavaScript standard lacks a few basic objects and library helpers that are vital for building rich, world-wide Web applications. Last year, we shared a reference implementation of an emerging proposal for anInternationalization API for JavaScript. This API introduces support for number formatting, date and time formatting, and locale sensitive collation or string comparison. Given that this limitation fundamentally prevents world-ready sites from being written interoperably on the standards Web platform; the working group, which includes members from Amazon, Google, Mozilla, and Microsoft, have collaborated to finalize the draft specification ahead of the draft ECMAScript 6 specification. A couple of weeks ago, the standards committee met in the Computer Science department on the campus ofNortheastern University and finalized the proposed API. We have updated our reference implementation to match the current draft of the specification.
We’ve also published a demo to illustrate the use of this API in to visualize Foreign Currency Exchange. This is a common Web scenario that today has to be written using a plug-in, a browser extension, or through interaction with the server. Play with the demo, open the JavaScript console to interact with the API, and give us feedback.

Charting Historical Foreign Currency Exchange with the Internationalization API

Perusing sites like Google Finance, Yahoo Finance, FXCM, ForXCharts, and other ForEx sites, a pattern emerges: all of these sites implement their user experience using a combination of plug-ins, extensions, or constructs which require server round-tripping for interactivity. Because these sites need to format currencies, present dates according to a specific locale, and sort strings like stock tickers with locale specific string comparison, the Web platform comes up short for them today.

1) Yahoo Finance ForEx Chart using Flash to format numbers 2) Google Finance using Flash to format DateTime
Aside from the ActiveX control which provides support for the API, the user experience of our ForEx test drive demo is written 100% in JavaScript. It uses jqPlot to chart the currency exchanges format dates and currencies in JavaScript. At the top of the demo, you can pick a Foreign Exchange pair, such as comparing EUR/JPY and view it with a locale specific date format by selecting the ja-JP-u-nu-latin language tag. When you hit the “Plot with Intl” you’ll see the JavaScript API in action.

Overview of the JavaScript Internationalization API

Web applications are harder to globalize than native applications because JavaScript does not provide access the native date and currency formats in the underlying OS. All JavaScript implementations run on top of operating systems that include comprehensive internationalization libraries that have varying degrees of support. With the introduction of this API, there will be a standard interface for accessing these libraries. The internationalization library in Windows 8 includes support for 364 available locales, 18 numbering systems, many date patterns, and includes support for the Gregorian, Islamic, Hebrew, Buddhist, Korean, and Japanese calendars.
For the purpose of this test drive demo, the reference implementation of the emerging standard is implemented as an ActiveX extension, but once installed and enabled it works just like the planned JavaScript API will work. You can even experiment with it in the JavaScript console window.
The API itself enables three basic capabilities to the Web platform:
  • Number formatting – Format numbers with specified decimal lengths or as a currency or percentage
  • Date and Time formatting – Converts a time value into a string provided inputs of time zone, second, minute, hour, day, month, year, weekday, or era
  • Ordinal String Comparison – Formally known as collation which does locale specific string comparison
Below you can find an example of the API in action:
// Number formatting
var nf = new Intl.NumberFormat(["en-US"], {
    style: "currency",
    currency: "CNY",
    currencyDisplay: "symbol",
    maxmimumFractionDigit: 1
})

nf.format(100); // "¥100.00"

// Date formatting
var dtf = new Intl.DateTimeFormat(["ar-SA-u-ca-islamic-nu-latin"], {
    weekday: "long"
});
dtf.format(new Date()); // Prints today's week day in long format

//Collation sample
var co = new Intl.Collator(["de-DE-u-co-phonebk"]);
co.compare("a", "b"); // returns -1

Next steps for the ECMAScript Standard

While the internationalization API is in the process of being ratified, the standards committee continues to refine the list of proposals for the next version of the standard, ECMAScript 6, which is targeted to be completed in 2013. As with the internationalization API, we welcome feedback on these proposals to ensure that we’re able to faithfully represent the needs of Web developers when the standards committee meets every few months.
The best way to get a feel for the proposals is to experiment with the reference implementations. We encourage you to play with the sample app or play with the prototype API in the JavaScript console to see how it feels. Once you’ve tried it out, let us know if you have any feedback or suggestions. We look forward to improving JavaScript and making it ever easier to build great Web applications using standard APIs.
— Suresh Jayabalan & Amanda Silver, Program Managers, JavaScript Team

Web Platform Docs Debuts with Developer Resources


Today, we are taking another step forward in helping developers achieve the goal of interoperability through same markup. We’re happy to be part of creating Web Platform Docs (WPD), a new W3C hosted community resource for developers and designers who use open Web standards. For developers the Web is about building great experiences with the potential to reach millions of people around the world by writing interoperable sites and applications. We’ve talked many times about the promise of interoperability through the same standards-based markup yielding the same results.
Web Platform Docs (WPD)
The W3C, Adobe, Apple, Facebook, Google, HP, Microsoft, Mozilla, Nokia and Opera have teamed up to create and seed this new community-driven site whose aim is to become a central repository for Web developer documentation.
  • Clear reference docs that are accurate, complete, and indicate adoption rate.
  • Thoughtful tutorials for existing and new technologies.
  • A sample library that takes into account real-world scenarios.
  • The ability to see—at a glance—which technologies are on a standard track and the stability and implementation status of features.
WPD uses MediaWiki as its platform, and in the model of Wikipedia, WPD’s strength comes from a global assembly of volunteer developer contributors. Anyone can become a member, anyone can contribute, and the resulting community creates and manages the content through collaboration and mitigation. The W3C is the site’s convener and administrator. The founding organizations (and others who wish to join with financial support for the project) are known as stewards. The stewards help in infrastructure decisions and will have members act as contributors with the same rights as every other member who joins on their own. The stewards seeded WPD with topics donated from already-published content (over 3,200 topics from MSDN) and will continue to add content moving forward.
We view this as an opportunity to combine our information with that of other creators of developer content in a way in which the whole will become greater than the sum of its parts. Having developer content assembled in WPD means the data that’s important to your planning is centrally located and accurate. You won’t have to look at competing sites and wrestle with conflicting information. At the same time, evolving or proprietary APIs will be included, and they will be clearly marked as such. And when a topic is missing information or contains an error, you can flag it for a community member to update—or do it yourself.
It has been a pleasure and an honor working with our global and diverse partners in making this site a reality, and this is just the beginning for WPD. Creating a comprehensive standard reference library that drives standard adoption will take an ongoing concerted effort. We believe that part of building a highly interoperable Web browser means providing developers with the resources to achieve an environment where the same code and markup delivers the same results. And that makes the Web better for everyone.
— Eliot Graff, Content Publishing, Internet Explorer

Security Advisory 2755801 Revised to Address Adobe Flash Player Issues


Today we released an update that addresses vulnerabilities in Adobe Flash Player in Internet Explorer 10 on Windows 8. The majority of customers have automatic updates enabled and will not need to take any action because the update will be downloaded and installed automatically. For those manually updating, we encourage you to apply this update as quickly as possible.
This update addresses the vulnerabilities in Adobe Flash Player by updating the affected Adobe Flash binaries contained within Internet Explorer 10. For more information, see theadvisory.
— Vishwac Sena Kannan, Program Manager, Internet Explorer

IE10 on Windows 7 available in November


As we approach general availability of Windows 8, we want to provide an update on IE10 for Windows 7. We will release a preview of IE10 on Windows 7 in mid-November, with final availability to follow as we collect developer and customer feedback.
IE10 on Windows 7 has the same standards based platform for developers to target as IE10 on Windows 8. We built an entirely new browser with Windows 8, with more performance and developer capabilities. IE10 brings improved real-world site performance and additional standards support to Windows 7 that Web developers have been asking for. We look forward to getting your feedback on IE10 on Windows 7, and will provide another update when the preview is available.
—Rob Mauceri, Group Program Manager, Internet Explorer

Web Performance: When millisecond resolution just isn’t enough


Sometimes measuring time in millisecond resolution just isn’t accurate enough. Together with industry and community leaders, the W3C Web Performance working group has worked to solve this problem by standardizing the High Resolution Time specification. As of this week, this specification has been published as a Proposed Recommendation (PR) and is widely adopted in modern browsers. Take a look at the What Time is it? test drive demo to see how this API works.
This specification has gone from just an idea to PR in eight short months. The PR stage of standardization is the final step before a Web standard becomes an official W3C Recommendation. Additionally, this interface has been broadly adopted in browsers, including full support in Internet Explorer 10 and Firefox 15, and supported with a prefix in Chrome 22. This is a great example of what’s possible when the industry and community come together through the W3C.
So why aren’t milliseconds good enough? Time has long been measured in the Web platform using some form of the JavaScript Date object, whether it is through the Date.now() method or the DOMTimeStamp type. The Date object represents a time value as time in milliseconds since 01 January, 1970 UTC. For most practical purposes, this definition of time has been sufficient to represent any instant to within 285,616 years from 01 January, 1970 UTC.
For example, at the time of writing this blog, my Date.now() time value from my IE10 Developer Tools Console was 1350509874902. This thirteen digit number represents the number of milliseconds from the origin of this time base, 01 January, 1970. That time corresponds to 17 Oct 2012 21:37:54 UTC.
Though this definition will continue to be genuinely useful for determining the current calendar time, there are some cases where this definition is not sufficient. For example, it is useful for developers to determine if their animation is running smoothly at 60 frames per second (one frame painted every 16.667 milliseconds). Using the simple method of calculating the instantaneous FPS by measuring when the frame drawing callback was last made, one can only determine FPS to 58.8 FPS (1/17) or 62.5 FPS (1/16).
Similarly, sub-millisecond resolution is also desirable when accurately measuring elapsed time (e.g., using the Navigation Timing, Resource Timing and User Timing APIs to instrument your network and script timing) or when attempting to synchronize animation scenes or audio with animation.
To solve this issue, the High Resolution Time specification defines a new time base with at least microsecond resolution (one thousandth of a millisecond). To reduce the number of bits used to represent this number and to increase readability, instead of measuring time from 01 January, 1970 UTC, this new time base measures time from the beginning of navigation of the document, performance.timing.navigationStart.
The specification defines performance.now() as the analogous method to Date.now() for determining the current time in high resolution. The DOMHighResTimeStamp is the analogous type to DOMTimeStamp that defines the high resolution time value.
For example, looking at the current time using performance.now() and Date.now() in the IE10 Developer Tools Console at the time of writing this blog, I see the following two values:
performance.now():           196.304879519774
Date.now():        1350509874902
Even though both of these time values represent the same instance in time, they are being measured from a different origin. The performance.now() time value definitely feels more readable.
As High Resolution Time is measured from the start of a document’s navigation, performance.now() in a sub-document will be measured from the start of navigation of the sub-document, not the root document. For example, suppose a document has same-origin iframe A and cross-origin iframe B, where a navigation occurred in iframe A about 5 milliseconds after the start of navigation of the root document and in iframe B about 10 milliseconds after the start of navigation of the root document. If we measure the exact moment of time 15 milliseconds after the start of navigation of the root document, we would get the following values for performance.now() calls in the different contexts:
performance.now() in iframe B:                                5.123 ms
performance.now() in iframe A:                               10.123 ms
performance.now() in root document:                    15.123 ms
Date.now() in any context:                         134639846051 ms
Figure illustrating the difference of how Date.now() measurement compares with performance.now()
Figure: Date.now() is time measured since 01 January 1970, whereas performance.now() is time measured since the start of the document navigation
This design not only ensures there is no data leakage on the time of creation of the parent in cross-origin iframes, it also allows you to measure time relative to your start. For example, if you were using the Resource Timing interface (which uses High Resolution Time) to determine how long it takes for a server to respond to a resource request in a sub-document, you wouldn’t need to make adjustments to take the time of adding the sub-document to the root document into account.
If you wish to do cross frame time comparisons, you would just need to request top.performance.now() to get a time value relative to the root document’s start of navigation, which would return the same value in all same-origin iframes.
Another significant benefit of this API over Date.now() is that performance.now() is monotonically increasing and not subject to clock skew or adjustment. The difference between subsequent calls to performance.now() will never be negative. Date.now() doesn’t have such a guarantee and in practice we have heard of reported cases where negatives time have been seen in analytics data.
High Resolution Time is another great example of how quickly new ideas can become interoperable standards that developers can depend on in modern HTML5-enabled browsers. Thanks to everyone in the W3C Web Performance Working Group for helping design this API and to other browser vendors for rapidly implementing it with an eye towards interoperability.
Thanks,
Jatinder Mann
Internet Explorer Program Manager

понедельник, 15 октября 2012 г.

IEBlog 2010: Connecting With You


When IEblog was inaugurated on July 21, 2004, we set out to establish “a better connection with the IE Team.” 2010 took that connection to a new level by introducing 7 pre- and post-beta Platform Previews, a Test Drive site of 75 informative, entertaining, and discussion-provoking demos, and 137 IEBlog posts—more than any year other than 2006, the year of IE7’s release. For the first time, we included HTML5 H.264 video directly in posts.
You responded with over 7,050 comments, the most-commented posts being those describing the IE9 beta and third and fourth platform previews, two articulating our point-of-view regarding HTML5 video, and two outlining the site-centric design of IE9’s user experience.
The table below lists 2010’s seven most-commented-upon posts:
Sept. 15: Putting sites at the center of the browsing experience, using the whole PC: IE9 Beta Available for Download
 287 comments
Aug. 4: HTML5, Modernized: Fourth IE9 Platform Preview Available for Developers
 280
April 29: HTML5 Video
 233
June 23: HTML5, Native: Third IE9 Platform Preview Available for Developers
 215
Sept. 15: User Experiences: Site-Centric Browsing on Windows
 184
Sept. 20: User Experiences: Sites in the Spotlight
 182
May 3: Follow Up on HTML5 Video in IE9
 176

Web Sites at the Center

As the title of our top-commented post indicates, IE9 is all about putting Web sites at the center of the browsing experience. In addition to browsers and Web sites, we talked a lot about performance, developers, JavaScript, HTML5, SVG, and standards. We explained IE9 features, documented using its DOM, and provided interoperable examples. Though we directed most of our 2010 energy toward IE9, we continued to support users of IE7 and IE8 by providing important security updates throughout the year.
The following Wordle™ word cloud visualizes the 150 most popular words used in 2010’s posts (open SVG in its own window):
IEBlog 2010 Word Cloud

Same Markup and Hardware Accelerated

Two IE9 themes we emphasized repeatedly during 2010 were same markup and hardware-accelerated rendering (42 of 137 posts used the phrase “same markup” while 26 mentioned “hardware accelerated”). We underscore these because we believe it is these two attributes, along with overall DOM and JavaScript performance, that will most distinguish the HTML5 Web sites and applications of the future. By being able to use the same HTML, CSS, SVG, and JavaScript markup and code across browsers, more Web developer time can be spent delivering new end-user value while less is spent dealing with annoying differences between browsers. By building on a hardware-accelerated graphics platform using new features such as SVG, , and CSS3, developers will be able to deliver the kinds of experiences designers dream of—experiences such as those showcased at our Beauty of the Web site.

Where Next?

For sure, we’ll be writing a lot more about IE9 in the weeks and months to come. We hope the information presented in IEBlog is useful and actionable. What information on this blog do you find most valuable? We want your feedback on the IEBlog itself. How can we make this a better resource for you?
The feedback you provide us through your comments is valuable as we assess where to go next with Internet Explorer as well as the IEBlog itself. Thank you for your support during 2010 and here’s looking forward to a great 2011!
—Ted Johnson for the Windows Internet Explorer Engineering Team

The CSS Corner: CSS3 Media Queries


As we announced with our second Platform Preview last year, IE9 supports CSS3 Media Queries. CSS3 Media Queries enable you to style pages based on different display surface factors such as width, height, orientation, resolution, etc. Developers can use these factors to customize their sites for viewing on different devices such as a small-screen netbook or a widescreen monitor. In this post, I talk more about CSS3 Media Queries and the various scenarios they enable.

Evolution of Media Queries

Internet Explorer has supported the ‘screen’ and ‘print’ CSS2 media types since IE5. The print media type is especially useful if you want to change your printed page layout. It eliminates the need for Web sites to host a separate print-friendly version of their site and enables some useful print optimizations such as expanding hyperlinks. The CSS 2.1 media types spec includes definitions for many media types including handheld devices, speech synthesizers, and televisions. However, in practice only screen and print were widely adopted.
CSS3 Media Queries expands the notion of optimizing for a particular media type by making it possible to optimize for particular properties of the media. ‘Screen’ is a useful media type, but there are many types of screens—from mobile phones with tiny screens to laptops with averages screens to desktop machines connected to widescreen monitors as large as 30"; newer screens may be higher resolution than screens of the recent past. As a Web developer, you may want to reflow your Web page for each of these devices in order to give site vistors the best experience on their device. CSS3 Media Queries enable you to target your CSS as generally or as specifically as you like.

Basic Example

To write a media query which targets screens which are 1250px wide you could write the following (note:‘screen’ width and height actually refer to the width and height of the browser window, not the physical display):
@media screen and (width:1250px) { ... }
However, targeting a screen (browser) which is exactly 1250px wide isn’t really that useful because it’s not often that the browser window will be exactly 1250px wide. Instead it’s more useful to target a range of sizes, such as 900px to 1300px:
@media screen and (min-width:900px) and (max-width:1300px) { ... }
On the IE Test Drive site you can find a CSS3 Media Queries demo which illustrates the use of a few different media queries to alter the page layout based on your screen (browser) width. The page is optimized for both widescreen sizes and very narrow sizes. To see the effect, be sure to change your browser window size as you view the page.
In a widescreen view, the page uses a side by side layout with large images and descriptive text:
CSS3 Media Queries illustrated on wide window
In a narrow view, the page uses cropped images and removes the titles and descriptions.
CSS3 Media Queries illustrated on narrow window
In addition to writing @media rules within your CSS files, you can also use CSS3 media queries in the media attribute of link and style tags and within an @import block. A few examples:


@import "widescreenStyleSheet.css" screen and (min-width:100px);

Media Features

In addition to width, IE9 supports the following media features:
  • width – width of the display area
  • height – height of the display area
  • device-width – width of the device rendering surface
  • device-height – height of the device rendering surface
  • orientation – landscape or portrait
  • aspect-ratio – ratio of the ‘width’ to ‘height’ media features
  • device-aspect-ratio – ratio of the ‘device-width’ to ‘device-height’ media features
  • resolution – resolution of the output device
  • color – number of bits per color component of the output device
  • color-index – number of entries in the color lookup table of the output device
  • monochrome – number of bits per pixel in a monochrome frame buffer (0 if the device is not monochrome.)
With the exception of orientation, all IE9 supported media features can be used with the ‘min-’ and ‘max-’ prefixes.

Next Steps

The types, sizes, and capabilities of the displays that people browse with are growing more and more diverse. CSS3 Media Queries make it easy for web developers to build one site that delivers a great experience on all displays.
If you’ve found CSS3 Media Query bugs in your testing of IE9 Beta or the Platform Previews, please file them onMicrosoft Connect.
—Sharon Newman, Program Manager

Working with Pinned Sites


With Internet Explorer 9 Beta, you can pin a Web site to the Windows 7 taskbar the same way you pin Windows applications. Once pinned, you can launch Web sites directly—just like you launch other things in Windows 7. Pinning a site is as easy as dragging an IE9 tab to the Windows 7 taskbar.
Previously, Web sites didn’t have a direct presence on the PC desktop and you had to effectively “boot twice”—once for the operating system and once for the browser—to get to a site. With Pinned Sites, users have a faster and easier time getting to the Web sites they use most often.
Once a site is pinned, Web developers can use the Pinned Site metadata and methods to add tasks to the taskbar icon’s Jump List, alert users with notification icons, and create thumbnail toolbar buttons to control a site. Adding this functionality to a Web site requires little development cost and offers your site visitors a much better Web experience. Developers can read more about this in User Experiences: Customizing Pinned Sites as well as Pinned Sites: Windows 7 Desktop Integration with Internet Explorer 9, or watch the PDC 2010 session “Taking Advantage of Pinned Sites with Internet Explorer 9 and Windows 7” (fast forward to about the 10 minute point).

New API Documentation

Today we introduce new developer documentation that shows how to use the Pinned Site (aka Site Mode) API to enhance and create great-looking Pinned Sites in Windows 7. This documentation picks up from where the IE Test Drive Site Pinning samples left off, including lots of code that shows how the sample sites were developed.
Four scenarios are presented, each demonstrating an aspect of the Pinned Site capabilities of Internet Explorer 9:

Channel9 Podcast Player Sample: Basics

Add basic pinned site functionality to the Channel9 Podcast Player sample, including static Jump List items. Also learn how to promote the Pinned Site functionality of your Web site.

Channel9 Podcast Player Sample: Remote Control

Create thumbnail toolbar buttons to control audio playback in the Channel9 Podcast Player sample.

TweetFeed Sample: Search History

Insert items into a custom Jump List category based on user interaction with the TweetFeed sample.

TweetFeed Sample: Notifications

Notification icon  Notification icon
Notification icons
Use notification icons to show activity in the TweetFeed sample.
Introduction to Pinned Sites is the best overview of the Pinned Site API. It also explains the benefits of the technology and describes how this functionality can improve user engagement with the sites you develop.

Feature-Detection for Pinned Sites

Feature detection is critical for developing sites that work properly across multiple browsers. Unlike techniques that detect specific browsers or check for the presence of unrelated features, feature detection enables developers to test whether a browser supports a specific feature before using it and allows the developer to test for known issues before applying a workaround (see Same Markup: Writing Cross-Browser Code).
Pinned Site APIs are no different; we encourage the use of feature detection for verifying that Pinned Site functionality is available before using it. The msIsSiteMode method of the external object is the best way to determine whether the Pinned Sites feature is available. The following code provides the correct behavior for using the Pinned Sites API when available and triggering an alternate code path (in the catch clause) when it is not:
    try {
        if (external.msIsSiteMode()) {
            /*Code for when site mode is supported and active*/
        }
        else {
            /* Code for when site mode is supported, but inactive */
        }
    }
    catch (e) {
        /*Code for when site mode is not supported */
    }

Programming Pinned Sites from Adobe Flash and Microsoft Silverlight

Developers who use Adobe Flash or Microsoft Silverlight controls inside IE9 can also take advantage of the JavaScript Pinned Sites (Site Mode) APIs to integrate their site with the Windows 7 taskbar.
For example, pages that play audio or video using Adobe Flash can add media controls to the page thumbnail (see screen capture below). Developers should call the appropriate Flash Player playback control functions documented here on the 'msthumbnailclick' event handler on the Web page. This method uses JavaScript APIs to invoke Flash Player playback control functions.
Flash-generated media controls in Windows 7 taskbar thumbnail
Flash-generated media controls in Windows 7 taskbar thumbnail
Pages can also use ActionScript to offer users custom jump lists on the Taskbar as explained here. Microsoft Silverlight is capable of the same level of integration. For details on how to do this see this post. The only prerequisite to using this functionality with Flash or Silverlight is that the control be hosted in the IE9 browser, not a standalone application.

Developer Training Available

Starting today, January 17, 2011, Microsoft is conducting a series of Windows Development Boot Campsthroughout the United States Central region. The Boot Camp is a one-day deep dive class on client development. The event covers developing for Windows 7, Internet Explorer 9, and Silverlight 4 out-of-browser. Part of this training includes how to use the Pinned Site (Site Mode) APIs to integrate with Windows 7. For more information visit http://www.windowsdevbootcamp.com/.
Pinned Sites provide a fast and easy way to access the Web sites used most often. By providing some of the advanced Pinned Site capabilities described here, you can make your Web site even easier for your site’s visitors to use.
—Israel Hilerio, Ph.D., Principal Program Manager, Internet Explorer

Update: Effectively Protecting Consumers from Online Tracking


Since December’s technology announcement about IE9’s Tracking Protection feature, we’ve seen a lot of interest from press, academics, governments, and industry groups. This blog post is an update based on the conversations we’ve had on this topic – visiting with government and industry groups in Europe last week, faculty and students at a joint Harvard-Stanford Law School class earlier this month, and with the Wall Street Journal / All Things D at the Consumer Electronics Show earlier this month as well. It’s another example of our approach to developing IE9 transparently and with the engagement of many different communities.
Privacy is a worldwide conversation and, at the same time, it is intensely local. Local sensibilities and expectations differ from Germany to the UK to Japan to the United States. One size can’t fit all. Privacy is a broad topic, ranging from Street View issues to medical record disclosure.
IE9’s Tracking Protection focuses on the issue of online tracking. Consumers on the Web are tracked every day without their awareness or permission. As a result, there is growing consumer concern and suspicion about tracking. That theme was consistent across the conversations visiting government agencies and industry groups in the United States last month as well as the conversations in Europe last week.
IE9’s Tracking Protection is a technology that enables governments and organizations and enthusiasts to better protect consumers from tracking. This technology works within and complements the privacy frameworks being developed worldwide. It is an effective way to put effective consumer privacy protections into operation.

Progress and News with Standardization and Lists

To protect consumers, having Tracking Protection work consistently across browsers is important. In December, we made the underlying format for Tracking Protection available under a Creative Commons Attribution licenseand the Microsoft Open Specification Promise so that they same lists can work in other browsers. Since then, the premier Web standards body, the W3C, has contacted us about standardizing the format. We are taking the next steps with the W3C to standardization.
We’ve had many conversations with governments, organizations, and interested individuals both in the United States as well as Europe about our approach. The feedback has been positive. Earlier this week, the European Privacy Association stated publicly that it welcomes this feature and the empowerment it will bring. In December, the Chairman of the US Federal Trade Commission, Jon Leibowitz, said “Microsoft deserves enormous credit for taking a critical step toward providing consumers with more choice about who can track their online browsing. Just as important, this announcement proves that technology is available to let consumers control tracking.” In an interview with the Washington Post in December, Viviane Reding, the vice president of the EU Justice Commission and head of privacy regulation, responded to the inclusion of these privacy features in IE9 by saying “this is the right direction and what is important is that industry has understood it can’t ignore privacy concerns. If they want to be efficient, they have to have privacy enhancing tools build in. And companies want legal certainty about privacy.”
The development of Tracking Protection Lists, for both US and European consumers, is underway. Several consumer privacy organizations have preliminary lists in testing. Some advertising industry groups, recognizing how Tracking Protection enables more effective self-regulation, are also in the process of developing Tracking Protection Lists. They have been clear and articulate about their point of view that ads and tracking are different, separate things. We’re excited to see them put that point of view into practice.
An interesting non-advertising scenario came up in conversations with some government agencies last week. There was concern that with all the tracking content on websites today, it would be possible (for example) for an entity on the Web to determine that several machines in a Defense Ministry were checking the weather in a particular part of the world, or that many browsers in the Healthcare Ministry showed a spike in visits to articles on a particular topic. There may be similar concerns for businesses, for example in finance, in a tracking agent paying close attention to the Web browsing patterns of employees. Tracking Protection functionality will work with the enterprise deployment and management tools available in Windows.

How Tracking Protection Works and Alternative Approaches

Tracking Protection works by blocking content that can be used to track you on the Web.
Typical Web pages that you visit are a mosaic of content from all over the Web. For example, if you look at these screen shots, or use developer tools in the browser, you can see how much content on a Web page comes from sites other than the one in your address bar. Cookies are just one of many ways that tracking happens; you can see examples of tracking pixels in the screen shots linked to above.
To turn on tracking protection, a user just clicks on a special link in a Web page. All their browsing across the Web, from then on, is protected from tracking until the user explicitly turns it off. Clicking that link adds aTracking Protection List of Web addresses (like “msdn.com”) that the browser will block (unless the user visits them directly and can see them in the address bar). By limiting how the browser visits certain websites, Tracking Protection limits the information these sites can collect. (These lists also accommodate “allow” as well as “block” rules; please see the earlier technical post for more detail.) The system is open in that any Web site can host these links and lists, and any person can author and share a list.
This approach enables consumers to have push-button simplicity (just find a site and click a link) while leaving privacy and industry experts and enthusiasts the flexibility and freedom to provide consumers great guidance and recommendations on their own websites that offer Tracking Protection lists. As consumers find pages and lists that they like and trust, they can share them (via email, blog, Facebook, Twitter, etc.) and engage in privacy awareness.
Earlier this week other browser providers made announcements regarding alternative approaches to privacyprotection. The specifics of the proposals are under active discussion on the Web (here for example, and hereor here). What’s most important is that consumers have effective privacy protections to go along with great browser performance and an experience that puts the focus where it belongs: on the Web, not the browser.
—Dean Hachamovitch, Corporate Vice President, Internet Explorer