<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>IEBlog</title><link>http://blogs.msdn.com/b/ie/</link><description>Windows Internet Explorer Engineering Team Blog</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/IE" /><feedburner:info uri="ie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>Sharing Links from IE10 on Windows 8</title><link>http://blogs.msdn.com/b/ie/archive/2012/05/14/sharing-links-from-ie10-on-windows-8.aspx</link><pubDate>Mon, 14 May 2012 20:53:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10305071</guid><dc:creator>ieblog</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10305071</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/05/14/sharing-links-from-ie10-on-windows-8.aspx#comments</comments><description>&lt;script src="http://ie.microsoft.com/testdrive/IEBlog/Common/mp4VideoFailUseEmbed.js"
    type="text/javascript"&gt;&lt;/script&gt;
&lt;p&gt;Sharing a link to a Web page is a common activity on the PC, and it gets better with IE10 on Windows 8. One of the new features on Windows 8 is the Share charm, which allows you to seamlessly send content between apps on your PC. Previously, if you wanted to share an interesting article with your friend, or post a funny picture on your blog, you’d copy the link from the address bar, switch to a different site or app, and then paste it. Now, with the Windows 8 Share charm, you can share directly from the browser without ever leaving your current page.&lt;/p&gt;
&lt;p&gt;When you use the Share charm to share a site from the browser, IE10 creates two data formats that contain relevant content – the URI, and some HTML that includes a rich representation of the page. Here are two examples of data that get shared for a YouTube video:&lt;/p&gt;
&lt;p style="margin-left: 0.25in;"&gt;The URI (of the current site)&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;code&gt;http://www.youtube.com/watch?v=4DbgiOCTQts&lt;/code&gt;&lt;/p&gt;
&lt;p style="margin-left: 0.25in;"&gt;The HTML (with a link preview)&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 85%; padding: 12px; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="An example of IE10&amp;#39;s rich preview of Web pages" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/2313.gysrfswi_2D00_gysrfswi_2D00_image1_2D00_1_5F00_521x115.png" /&gt;&lt;br /&gt;An example of IE10's rich preview of Web pages&lt;/p&gt;
&lt;p&gt;Both of these data formats are created for an “implicit” share, which is the name for what happens when you share the site that you are currently viewing. Since Web pages can be represented as hyperlinks or a rich HTML link preview, IE10 includes both types of data. Of course, if you aren’t sharing the whole page, but rather, some content that you’ve highlighted, IE10 will share the HTML of your selection instead of the URI and the link preview. In this case, sharing a selection would be called an “explicit” share, and does not include the link. This post describes the link sharing case, how IE10 participates in the Windows 8 Share contract using HTML, and how Web developers can create link previews with just a few meta-tags.&lt;/p&gt;
&lt;h2&gt;The Share Charm and IE10&lt;/h2&gt;
&lt;p&gt;Here’s a video of how a user might share links from the browser to an app that uses HTML.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;video style="width: 640px; height: 360px; border: 1px solid #999; outline: 0;" controls="controls"
        preload="metadata" onerror="mp4VideoFailUseEmbed(this)" onplay="this.blur();" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-video/0511.SharingLinkPreviews_2800_Yelp_2900_.mp4" type="video/mp4"&gt;
        &lt;embed style="width: 640px; height: 360px; border: 1px solid #999;" src="http://ie.microsoft.com/testdrive/IEBlog/Common/player.swf"
            type="application/x-shockwave-flash" wmode="opaque" allowscriptaccess="never"
               allowfullscreen="false" flashvars="file=http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-video/0511.SharingLinkPreviews_2800_Yelp_2900_.mp4&amp;autostart=false&amp;controlbar=over&amp;controlbar.idlehide=true&amp;bufferlength=0"&gt;&lt;/embed&gt;&lt;/video&gt;&lt;br /&gt;
               Sharing from IE10: Link Previews in Action&lt;/p&gt;
&lt;p&gt;In this video, “Stash” is a sample link saving app that makes use of the Windows share charm with HTML. The sample app simply supports the HTML data format for sharing, and IE provides the link preview. Link previews are HTML that contains a title, image, and description for every shared link. This makes it easy for you to recognize the site content. If you have &lt;a href="http://windows.microsoft.com/en-US/windows-8/download"&gt;Windows 8 Consumer Preview&lt;/a&gt; and &lt;a href="http://www.microsoft.com/visualstudio/11/en-us/downloads"&gt;Visual Studio 11 Beta&lt;/a&gt;, you can &lt;a href="http://ie.microsoft.com/testdrive/Browser/Windows8Share/DownloadDemoApp.html" target="_blank"&gt;download and run Stash&lt;/a&gt; on your own PC. Stash integrates with the Windows 8 Share contract as a target app, as you can see below. Below, you can see a high-level diagram that shows how links are shared from IE10.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; padding: 8px; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Diagram showing sharing a link from IE10 to target apps, using the Share charm’s data package" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/7028.gysrfswi_2D00_image1_5F00_760x385.png" /&gt;&lt;br /&gt;Diagram: Sharing a link from IE10 to target apps, using the Share charm’s data package&lt;/p&gt;
&lt;p&gt;Windows 8 Share charm handles the coordination between the source and target apps to provide an integrated sharing experience across all apps. This removes the need for target and source apps to be aware and coordinate between each other. &lt;/p&gt;
&lt;h2&gt;Sharing the Web is Better, Start to Finish&lt;/h2&gt;
&lt;p&gt;The Web is made up of HTML. That’s why HTML is one of the most important data formats in IE10’s integration with the Share contract. IE10 creates link previews to both provide a better sharing experience for users, and to help connect Web developers to Windows 8 Share. With a little extra meta-data markup, sites can define what information is included in their link previews. On the other end of the share contract, target apps that support the HTML data format can get the full experience of contextual Web hyperlinks without having to parse a single site. The end result is a rich, modern, and fluid sharing experience, from end to end.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Screenshot of target apps available in Share pane" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/6840.gysrfswi_2D00_image2_5F00_760x475.png" /&gt;&lt;br /&gt;Screenshot of target apps available in Share pane&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Screenshot of Stash’s Share Pane" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/4885.gysrfswi_2D00_image3_5F00_760x475.png" /&gt;&lt;br /&gt;Screenshot of Stash’s Share Pane&lt;/p&gt;
&lt;p&gt;When you share a Web site, IE10 parses that site to create a link preview. In the example above, it’s a short snippet of content that represents a movie page on IMDb. The goal of sharing HTML, in addition to the URI, is to share the best possible representation of what the user intended to share, so IE10 creates link previews for all implicit shares. The benefits of HTML are that it can include more information than a URI, and the content of the HTML is more meaningful than a hyperlink. In the words of &lt;a href="http://en.wikipedia.org/wiki/Leslie_Knope"&gt;Leslie Knope&lt;/a&gt;, no one wants to share that “complicated nonsense.”&lt;/p&gt;
&lt;div style="position: relative; height: auto;"&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Frame grab from the NBC show Parks and Recreation. Character Ron Swanson is holding a Knope for City Council sign most of which is long, complicated URL. Character Leslie Knope is saying, &amp;quot;So, as you can imagine, we would have never ordered a sign with all this complicated nonsense because, you know, we’re not insane.&amp;quot;" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/8508.parks_5F00_and_5F00_recreation.jpg" /&gt;&lt;br /&gt;
From NBC’s &lt;a href="http://www.nbc.com/parks-and-recreation/"&gt;Parks and Recreation&lt;/a&gt;, Season 4, Episode 16&lt;/p&gt;
&lt;div style="position: absolute; bottom: 2em; width: 100%; text-align: center;"&gt;&lt;span style="display: block; margin: 0 auto; -moz-box-sizing: border-box; box-sizing: border-box; max-width: 600px; padding: 0 3em; font-style: normal; color: White; font-size: 16px;"&gt;So, as you can imagine, we would have never ordered a sign with all this complicated nonsense because, you know, we’re not insane.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Depending on the target app, though, sometimes rich content is not the best kind of data, and a URI is more useful. For example, blogging apps can take advantage of rich HTML content, and SMS apps would do best to use the URI. Developers of Metro style apps choose the data format(s) that make most sense for their app to receive, following the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh771179.aspx"&gt;Windows 8 Share guidance&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Sites Use Markup to Define What IE10 Shares&lt;/h2&gt;
&lt;p&gt;Since IE10 uses existing markup meant for sharing on the Web, many sites will already look great when sharing HTML link previews on Windows 8. We support the &lt;a href="http://ogp.me/"&gt;Open Graph protocol&lt;/a&gt; as a simple way to add meta-data about the page. When users share sites on Facebook and through Windows 8 and IE10, you can use OpenGraph to control the way your Web page appears to others. &lt;/p&gt;
&lt;p&gt;Here’s an example of &lt;a href="http://ie.microsoft.com/testdrive/Performance/BrickBreaker/" target="_blank"&gt;an IE test drive demo&lt;/a&gt; that uses this markup:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;head&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;meta&lt;/span&gt; &lt;span style="color: Red;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;description&amp;quot;&lt;/span&gt; &lt;span style="color: Red;"&gt;content&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;Brick Breaker TestDrive Demo Game, Performance and Touch benchmark&amp;quot;&lt;/span&gt; &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;title&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;Brick Breaker&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;title&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;meta&lt;/span&gt; &lt;span style="color: Red;"&gt;property&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;og:image&amp;quot;&lt;/span&gt; &lt;span style="color: Red;"&gt;content&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;Views/Homepage/Icons/BrickBreaker.png&amp;quot;&lt;/span&gt; &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;head&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;IE looks for the following tags in the site’s markup to create the page’s link preview.&lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; margin-left: auto; margin-right: auto;"&gt;
&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;HTML tag&lt;/th&gt;
&lt;th&gt;Character limit&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Title 1&lt;/td&gt;
&lt;td&gt;&amp;lt;meta name="title" content="Insert Site Title Here” /&amp;gt;&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Title 2&lt;/td&gt;
&lt;td&gt;&amp;lt;title&amp;gt;Insert Site Title Here&amp;lt;/title&amp;gt;&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Description&lt;/td&gt;
&lt;td&gt;&amp;lt;meta name="description" content="Insert Site Description Here” /&amp;gt;&lt;/td&gt;
&lt;td&gt;253&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Image 1&lt;/td&gt;
&lt;td&gt;&amp;lt;meta property="og:image" content="insert_image_link_here" /&amp;gt;&lt;/td&gt;
&lt;td&gt;2,048 (limit for image URI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Image 2&lt;/td&gt;
&lt;td&gt;&amp;lt;link rel="image_src" href="insert_image_link_here" /&amp;gt;&lt;/td&gt;
&lt;td&gt;2,048 (limit for image URI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Image 3&lt;/td&gt;
&lt;td&gt;&amp;lt;meta name="image" content="insert_image_link_here" /&amp;gt;&lt;/td&gt;
&lt;td&gt;2,048 (limit for image URI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Image 4&lt;/td&gt;
&lt;td&gt;&amp;lt;meta name="thumbnail" content="insert_image_link_here" /&amp;gt;&lt;/td&gt;
&lt;td&gt;2,048 (limit for image URI)&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Note that this is the order in which we parse for each attribute. For example, if both Image 1 and Image 2 tags are present, we’ll use the Image 1 tag. Additionally, if more than one tag of any type is present, we use the first one you list in your markup.&lt;/p&gt;
&lt;p&gt;For character limits, if the description is longer than the maximum length, IE will put a “…” at the end in the preview.&lt;/p&gt;
&lt;p&gt;Make sure to include at least one of each property in your site markup to get your pages looking great for sharing in Windows 8. See &lt;a href="http://ie.microsoft.com/testdrive/Browser/Windows8Share/" target="_blank"&gt;this demo on the IE Test Drive site&lt;/a&gt; for more on how the markup works.&lt;/p&gt;
&lt;h2&gt;Apps Get the Benefit of a Powerful Web Browser&lt;/h2&gt;
&lt;p&gt;If your app supports the Share target app contract, you should consider whether it makes sense for it to support HTML as a shared data format. Apps that use HTML can benefit from the link previews shared by IE10 because IE10 does all of the heavy lifting. It parses the site and puts together a short and informative link preview, and all your app needs to do is display and host the HTML. The hyperlink is embedded within the preview, so it functions just like a Uri, but looks much better. This way, apps that don’t have the resources to parse the Web to condense pages into small, rich previews, can still display contextual links as HTML.  &lt;/p&gt;
&lt;p&gt;Many apps, in addition to IE10, will share HTML. Target apps that accept HTML must be agnostic about the source of the shared data. As noted above, IE10 shares HTML for both implicit and explicit sharing scenarios, so sometimes the HTML is a link preview, and sometimes it’s a user selection. In either case, the content of the HTML is the best possible representation of what the user intended to share. Here’s a snippet of what the link preview HTML generated by IE10 will look like when it’s added to the Share charm’s Data Package:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;html&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;body&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;&amp;lt;!--StartFragment--&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;style&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;/* IE10&lt;/span&gt;\uc1\u8217?s metro-style CSS attributes */&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;style&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;a&lt;/span&gt; &lt;span style="color: Red;"&gt;class&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;snippet-URL&amp;quot;&lt;/span&gt; &lt;span style="color: Red;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;http://site_link_goes_here&amp;quot;&amp;gt;&lt;/span&gt;Website Title goes here&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;a&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;table&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;td&lt;/span&gt; &lt;span style="color: Red;"&gt;class&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;snippet-image&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 12em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;img&lt;/span&gt; &lt;span style="color: Red;"&gt;src&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;image_link_goes_here&amp;quot;&lt;/span&gt; &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;td&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;td&lt;/span&gt; &lt;span style="color: Red;"&gt;class&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;snippet-text&amp;quot;&amp;gt;&lt;/span&gt;Website description goes here &lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;td&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;table&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;&amp;lt;!--EndFragment--&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;body&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;html&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;For an example of an app that uses HTML from IE10, &lt;a href="http://ie.microsoft.com/testdrive/Browser/Windows8Share/DownloadDemoApp.html" target="_blank"&gt;download the sample app “Stash”&lt;/a&gt; seen in the video above. This app demonstrates how a Metro style app can use HTML data as a share target.&lt;/p&gt;
&lt;p&gt;Here’s a code snippet from the app, which shows how Stash uses HTML sent from the Share charm.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px; overflow: auto;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; activatedHandler(eventArgs) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// In this sample we only do something if it was activated with the Share contract&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (eventArgs.detail.kind&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;=== Windows.ApplicationModel.Activation.ActivationKind.shareTarget) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// We receive the ShareOperation object as part of the eventArgs&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; shareOperation = eventArgs.detail.shareOperation;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (shareOperation.data.contains(&lt;/p&gt;
&lt;p style="margin: 0 0 0 12em;"&gt;Windows.ApplicationModel.DataTransfer.StandardDataFormats.html)) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;shareOperation.data.getHtmlFormatAsync().then(&lt;/p&gt;
&lt;p style="margin: 0 0 0 12em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; (htmlFormat) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 14em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Extract the HTML fragment from the HTML format&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 14em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; htmlFragment = Windows.ApplicationModel.DataTransfer&lt;/p&gt;
&lt;p style="margin: 0 0 0 16em;"&gt;.HtmlFormatHelper.getStaticFragment(htmlFormat);&lt;/p&gt;
&lt;p style="margin: 0 0 0 14em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Display the HTML in the Share pane.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 14em;"&gt;id(&lt;span style="color: Maroon;"&gt;&amp;quot;htmlArea&amp;quot;&lt;/span&gt;).innerHTML = htmlFragment;&lt;/p&gt;
&lt;p style="margin: 0 0 0 12em;"&gt;});&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The above code lets Stash accept HTML when the user selects it as their Share target. For more on developing a Share target app on Windows 8, see the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465255.aspx"&gt;MSDN Quickstart page for receiving shared content&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Happy sharing!&lt;/p&gt;
&lt;p&gt;—Alex Feldman, Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10305071" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Diagnosing JavaScript Errors Faster with Error.stack</title><link>http://blogs.msdn.com/b/ie/archive/2012/05/10/diagnosing-javascript-errors-faster-with-error-stack.aspx</link><pubDate>Thu, 10 May 2012 21:54:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10304005</guid><dc:creator>ieblog</dc:creator><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10304005</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/05/10/diagnosing-javascript-errors-faster-with-error-stack.aspx#comments</comments><description>&lt;p&gt;IE10 in &lt;a href="http://windows.microsoft.com/en-US/windows-8/consumer-preview"&gt;Windows 8 Consumer Preview&lt;/a&gt; includes support for &lt;code&gt;Error.stack&lt;/code&gt;, which enables Web developers to diagnose and correct bugs faster, especially those that are difficult to reproduce. Developers can build amazing apps with the capabilities of Web platforms that power today’s modern browsers. In Windows 8, we expose that power through both Internet Explorer 10 and &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/br211385.aspx"&gt;Metro style apps in JavaScript&lt;/a&gt;. The increasing power and complexity of these apps means developers need better tools like &lt;code&gt;Error.stack&lt;/code&gt; for handling errors and diagnosing bugs. &lt;/p&gt;
&lt;h2&gt;Debugging Applications&lt;/h2&gt;
&lt;p&gt;Structured error handling in JavaScript rests on &lt;code&gt;throw&lt;/code&gt; and &lt;code&gt;try/catch&lt;/code&gt; – where the developer declares an error and passes the control flow to a portion of the program that deals with error handling. When an error is thrown, Chakra, the JavaScript engine in Internet Explorer, captures the chain of calls that led up to where the error originated – also referred to as the call stack. If the object being thrown is an &lt;code&gt;Error&lt;/code&gt; (or is a function whose prototype chain leads back to &lt;code&gt;Error&lt;/code&gt;), Chakra creates a stack trace, a human-readable listing of the call stack. This listing is represented as a property, &lt;code&gt;stack&lt;/code&gt;, on the &lt;code&gt;Error&lt;/code&gt; object. The &lt;code&gt;stack&lt;/code&gt; includes the error message, function names, and source file location information of the functions. This information can help developers rapidly diagnose defects by learning what function was being called, and even see what line of code was at fault. For example, it might indicate that a parameter passed into the function was null or an invalid type.&lt;/p&gt;
&lt;p&gt;Let’s explore with an example of a simple script that attempts to calculate the distance between two points, &lt;code&gt;(0, 2)&lt;/code&gt; and &lt;code&gt;(12, 10)&lt;/code&gt;:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;(&lt;span style="color: Blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Maroon;"&gt;&amp;#39;use strict&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; squareRoot(n) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (n &amp;lt; 0)&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;&lt;span style="color: Blue;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue;"&gt;new&lt;/span&gt; Error(&lt;span style="color: Maroon;"&gt;&amp;#39;Cannot take square root of negative number.&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; Math.sqrt(n);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; square(n) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; n * n;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; pointDistance(pt1, pt2) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; squareRoot((pt1.x - pt2.x) + (pt1.y - pt2.y));&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; sample() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; pt1 = { x: 0, y: 2 };&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; pt2 = { x: 12, y: 10 };&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;console.log(&lt;span style="color: Maroon;"&gt;&amp;#39;Distance is: &amp;#39;&lt;/span&gt; + pointDistance(pt1, pt2));&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;try&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;sample();&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;catch&lt;/span&gt; (e) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;console.log(e.stack);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;})();&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;This script has a bug – it forgets to square the differences of the components. As a result, for some inputs, the &lt;code&gt;pointDistance&lt;/code&gt; function will simply return incorrect results; other times, it will cause an error. To understand the stack trace, let’s examine the error in the F12 developer tools and look at its Script tab:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Screen shot of the F12 developer tools showing a stack trace logged by calling console.log(e.stack) where e is the Error object passed to the catch clause of a try/catch block." src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/8037.djewes_2D00_image1_5F00_760x421.png" /&gt;&lt;/p&gt;
&lt;p&gt;The stack trace is dumped to the console in the &lt;code&gt;catch&lt;/code&gt; clause, and because it’s at the top of the stack, it’s readily apparent that the Error is originating in the &lt;code&gt;squareRoot&lt;/code&gt; function. To debug the problem, a developer wouldn’t have to go very deep into the stack trace; &lt;code&gt;squareRoot&lt;/code&gt;’s precondition was violated, and looking one level up the stack, it’s clear why: the sub-expressions within the call to &lt;code&gt;squareRoot&lt;/code&gt; should themselves be parameters to &lt;code&gt;square&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;While debugging, the &lt;code&gt;stack&lt;/code&gt; property can help identify code for setting a breakpoint. Bear in mind that there are other ways to view the call stack: for instance, if you set the script debugger to “Break on caught exception” mode, you may be able to inspect the call stack with the debugger. For deployed applications, you may consider wrapping problematic code within &lt;code&gt;try/catch&lt;/code&gt; in order to capture failed calls, and log them to your server. Developers would then be able to look at the call stack to help isolate problem areas.&lt;/p&gt;
&lt;h3&gt;DOM Exceptions and Error.stack&lt;/h3&gt;
&lt;p&gt;I noted previously that the object being thrown must be an &lt;code&gt;Error&lt;/code&gt; or lead back to &lt;code&gt;Error&lt;/code&gt; via its prototype chain. This is intentional; JavaScript supports throwing any object and even primitives as exceptions. While all of these can be caught and examined, they are not all specifically designed to contain error or diagnostic information. As a consequence, only Errors will be updated with a &lt;code&gt;stack&lt;/code&gt; property when thrown. &lt;/p&gt;
&lt;p&gt;Even though DOM Exceptions are objects, they don’t have prototype chains that lead back to &lt;code&gt;Error&lt;/code&gt;, and therefore they don’t have a &lt;code&gt;stack&lt;/code&gt; property. In scenarios in which you are performing DOM manipulation and want to surface JavaScript-compatible errors, you may want to wrap your DOM manipulation code within a &lt;code&gt;try/catch &lt;/code&gt;block, and throw a new &lt;code&gt;Error&lt;/code&gt; object within the &lt;code&gt;catch&lt;/code&gt; clause:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; causesDomError() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;try&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; div = document.createElement(&lt;span style="color: Maroon;"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;div.appendChild(div);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;} &lt;span style="color: Blue;"&gt;catch&lt;/span&gt; (e) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue;"&gt;new&lt;/span&gt; Error(e.toString());&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;However, you will probably want to consider whether you want to use this pattern. It is likely best-suited for utility library development; specifically, consider whether your code’s intent is to hide DOM manipulation, or to simply carry out a task. If it is hiding DOM manipulation, wrapping the manipulation and throwing an &lt;code&gt;Error&lt;/code&gt; is probably the right way to go.&lt;/p&gt;
&lt;h3&gt;Performance Considerations&lt;/h3&gt;
&lt;p&gt;The construction of the stack trace begins when the error object is thrown; doing so requires walking the current execution stack. To prevent performance problems in traversing a particularly large stack (possibly even a recursive stack chain), by default, IE only collects the top 10 stack frames. This setting is configurable, however, by setting the static property &lt;code&gt;Error.stackTraceLimit&lt;/code&gt; to another value. This setting is global, and must be changed &lt;code&gt;prior to throwing the error&lt;/code&gt;, or else it will not have an effect on stack traces. &lt;/p&gt;
&lt;h3&gt;Asynchronous Exceptions&lt;/h3&gt;
&lt;p&gt;When a stack trace is generated from an asynchronous callback (for example, a &lt;code&gt;timeout&lt;/code&gt;, &lt;code&gt;interval&lt;/code&gt;, or &lt;code&gt;XMLHttpRequest&lt;/code&gt;), the asynchronous callback, rather than the code that created the asynchronous callback, will be at the bottom of the call stack. This has some potential implications for tracking down offending code: if you use the same callback function for multiple asynchronous callbacks, you may find it difficult to determine by inspection alone which callback caused the error. Let’s slightly modify our previous sample so that, instead of calling &lt;code&gt;sample()&lt;/code&gt; directly, we’ll put that into a timeout callback:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;(&lt;span style="color: Blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Maroon;"&gt;&amp;#39;use strict&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; squareRoot(n) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (n &amp;lt; 0)&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;&lt;span style="color: Blue;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue;"&gt;new&lt;/span&gt; Error(&lt;span style="color: Maroon;"&gt;&amp;#39;Cannot take square root of negative number.&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; Math.sqrt(n);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; square(n) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; n * n;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; pointDistance(pt1, pt2) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt; squareRoot((pt1.x - pt2.x) + (pt1.y - pt2.y));&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; sample() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; pt1 = { x: 0, y: 2 };&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; pt2 = { x: 12, y: 10 };&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;console.log(&lt;span style="color: Maroon;"&gt;&amp;#39;Distance is: &amp;#39;&lt;/span&gt; + pointDistance(pt1, pt2));&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;setTimeout(&lt;span style="color: Blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;try&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;sample();&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;catch&lt;/span&gt; (e) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;console.log(e.stack);&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}, 2500);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;})();&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Upon executing this snippet, you’ll see the stack trace come up after a slight delay. This time, you’ll also see that the bottom of the stack is not Global&lt;code&gt; &lt;/code&gt;Code but rather is &lt;code&gt;Anonymous function&lt;/code&gt;. In fact, it’s not the same anonymous function, but the callback function passed into &lt;code&gt;setTimeout&lt;/code&gt;. Since you lose the context surrounding hooking up the callback, you may not be able to determine what is causing the callback to be called. If you consider a scenario in which one callback is registered to handle the &lt;code&gt;click&lt;/code&gt; event of many different buttons, you will be unable to tell to which callback the registration refers to. That being said, this limitation is only minor, because, in most cases, the top of the stack will likely highlight the problem areas.&lt;/p&gt;
&lt;h2&gt;Exploring the Test Drive Demo&lt;/h2&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%; border: 1px solid #999; box-shadow: 3px 3px 8px 0px hsla(0, 0%, 0%, 0.25);" alt="Screen shot of Test Drive demo Explore Error.stack" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/2654.Test_2D00_Drive_2D00_Screen_2D00_Capture.png" /&gt;&lt;/p&gt;
&lt;p&gt;Check out this &lt;a href="http://ie.microsoft.com/testdrive/browser/ExploreErrorStack/"&gt;Test Drive demo&lt;/a&gt; using IE10 in the &lt;a href="http://windows.microsoft.com/en-US/windows-8/consumer-preview"&gt;Windows 8 Consumer Preview&lt;/a&gt;. You can execute code in the context of an &lt;code&gt;eval&lt;/code&gt; and if an error occurs, you’ll be able to inspect it. If you’re running the code within IE10, you’ll also be able to highlight the lines of your code as you hover over the error lines in the stack trace. You can type code into the Code area yourself, or select from several samples in the list. You can also set the &lt;code&gt;Error.stackTraceLimit&lt;/code&gt; value when running the code samples.&lt;/p&gt;
&lt;p&gt;For reference material, you may want to cruise over to the MSDN documentation for &lt;a href="http://msdn.microsoft.com/en-us/library/hh699850(v=vs.94).aspx"&gt;&lt;code&gt;Error.stack&lt;/code&gt;&lt;/a&gt; as well as &lt;a href="http://msdn.microsoft.com/en-us/library/hh699849(v=vs.94).aspx"&gt;&lt;code&gt;stackTraceLimit&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;—Rob Paveza, Program Manager, Chakra Runtime&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10304005" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Building cross-browser plugin-free experiences</title><link>http://blogs.msdn.com/b/ie/archive/2012/04/26/building-cross-browser-plugin-free-experiences.aspx</link><pubDate>Thu, 26 Apr 2012 22:04:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10298231</guid><dc:creator>ieblog</dc:creator><slash:comments>30</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10298231</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/04/26/building-cross-browser-plugin-free-experiences.aspx#comments</comments><description>&lt;p class="PlainText"&gt;We've talked about how &lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/31/web-sites-and-a-plug-in-free-web.aspx"&gt;the transition to a plug-in free Web&lt;/a&gt; is happening today. Lots of Web browsing happens on devices that simply don’t support plug-ins. Web sites that use plug-ins need to understand what their customers experience &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/08/31/browsing-without-plug-ins.aspx"&gt;when browsing plug-in free&lt;/a&gt;. In case you missed it, check out &lt;a href="http://blog.reybango.com/about/"&gt;Rey Bango’s&lt;/a&gt; blog post where he lays out clear guidance for developers on &lt;a href="http://blog.reybango.com/2012/04/09/ios-to-ie10-metro-building-cross-browser-plugin-free-experiences/"&gt;building cross-browser plugin-free experiences&lt;/a&gt; and addressing issues like cross-browser CSS, media playback, and touch.&lt;/p&gt;
&lt;p&gt;-- John Hrvatin, Program Manager Lead, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10298231" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Compatibility/">Compatibility</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Platform/">Platform</category></item><item><title>Guidelines for Building Touch-friendly Sites</title><link>http://blogs.msdn.com/b/ie/archive/2012/04/20/guidelines-for-building-touch-friendly-sites.aspx</link><pubDate>Fri, 20 Apr 2012 18:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10295904</guid><dc:creator>ieblog</dc:creator><slash:comments>27</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10295904</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/04/20/guidelines-for-building-touch-friendly-sites.aspx#comments</comments><description>&lt;p&gt;In &lt;a href="http://preview.windows.com/"&gt;Windows 8 Consumer Preview&lt;/a&gt;, IE10 enables fast and fluid &lt;a href="http://ie.microsoft.com/testdrive/performance/loveisintheair/"&gt;multi-touch&lt;/a&gt; &lt;a href="http://ie.microsoft.com/testdrive/Performance/IrishSpring/"&gt;experiences&lt;/a&gt; on the Web. Most sites work fine with touch in IE10 with no changes to the site. This post provides four simple guidelines to ensure your customers who use touch can &lt;em&gt;most effectively&lt;/em&gt; use your site.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve written &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"&gt;before&lt;/a&gt; about how new input devices and touch screens make the Web more fun, interactive, and immersive. We&amp;rsquo;ve also talked about the importance of ensuring a &lt;a href="http://blogs.msdn.com/b/b8/archive/2011/09/14/metro-style-web-browsing-one-engine-two-experiences-no-compromises.aspx"&gt;no compromise&lt;/a&gt; browsing experience in IE10 so the real Web works great with touch.&lt;/p&gt;
&lt;p&gt;Of the four guidelines below, the first two make sure touch users can access all of your site&amp;rsquo;s functionality. The last two provide tips to make your site easier to use with touch.&lt;/p&gt;
&lt;h3&gt;DO NOT Hide Content Behind Hover&lt;/h3&gt;
&lt;p&gt;A mouse can hover content (point at it) without activating it (clicking it). However, with touch a tap is both hover and activation in one action. So functionality that requires hover without activating will not work for touch users. Instead, consider making all behaviors click (tap) based.&lt;/p&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;h3&gt;DO Configure the Browser for the Default Touch Behaviors That Work Well For Your Site&lt;/h3&gt;
&lt;p&gt;Users expect to be able to pan and zoom sites using touch. Therefore, the browser consumes touch moves, pinches, and double-taps by default and does not send events for these interactions. If your site needs to provide special functionality for these interactions instead, you must configure IE10 to provide only the default behavior you want, if any.&lt;/p&gt;
&lt;p&gt;When a user touches an element, the &lt;code&gt;-ms-touch-action&lt;/code&gt; CSS property determines the default behavior that IE10 provides.&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: red;"&gt;-ms-touch-action&lt;/span&gt;: &lt;span style="color: blue;"&gt;auto&lt;/span&gt; | &lt;span style="color: blue;"&gt;none&lt;/span&gt; | &lt;span style="color: blue;"&gt;manipulation&lt;/span&gt; | &lt;span style="color: blue;"&gt;double-tap-zoom&lt;/span&gt; | &lt;span style="color: blue;"&gt;inherit&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The table below describes the five possible values.&lt;/p&gt;
&lt;table style="margin: auto; border-collapse: collapse; max-width: 95%;" border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Value&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 2px 4px;"&gt;&lt;code&gt;auto&lt;/code&gt;&lt;/td&gt;
&lt;td style="padding: 2px 4px;"&gt;The browser determines the behavior for the element.&amp;nbsp; This is the default value for &lt;code&gt;-ms-touch-action&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 2px 4px;"&gt;&lt;code&gt;none&lt;/code&gt;&lt;/td&gt;
&lt;td style="padding: 2px 4px;"&gt;No default behavior is allowed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 2px 4px;"&gt;&lt;code&gt;manipulation&lt;/code&gt;&lt;/td&gt;
&lt;td style="padding: 2px 4px;"&gt;Only panning, pinch zoom, and swiping to navigate forward or back are allowed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 2px 4px;"&gt;&lt;code&gt;double-tap-zoom&lt;/code&gt;&lt;/td&gt;
&lt;td style="padding: 2px 4px;"&gt;Only double-tap zooming is allowed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 2px 4px;"&gt;&lt;code&gt;inherit&lt;/code&gt;&lt;/td&gt;
&lt;td style="padding: 2px 4px;"&gt;The element inherits the value of &lt;code&gt;-ms-touch-action&lt;/code&gt; from its parent.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For example, a canvas painting application might use:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: maroon;"&gt;canvas&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: red;"&gt;-ms-touch-action&lt;/span&gt;: &lt;span style="color: blue;"&gt;double-tap-zoom&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With this configuration, the user can double-tap to zoom in to the canvas element, but sliding a finger on the canvas element will send events to it rather than pan the page.&lt;/p&gt;
&lt;h3&gt;DO Identify Input Types Using HTML5 Forms&lt;/h3&gt;
&lt;p&gt;IE10 introduces support for HTML5 input controls, all of which are &lt;a href="http://ie.microsoft.com/testdrive/Browser/TouchFirstControls/Default.html"&gt;touch optimized&lt;/a&gt;. For text inputs, you can further improve your users&amp;rsquo; touch experiences by identifying the specific input type, when applicable. Internet Explorer will show a tailored touch keyboard layout for that input type on Windows 8:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="email"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="The touch keyboard shows @ and &amp;ldquo;.com&amp;rdquo; buttons for email addresses." src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/8463.gfbtfs_2D00_image1_2D00_2.png" /&gt;&lt;br /&gt;The touch keyboard shows @ and &amp;ldquo;.com&amp;rdquo; buttons for email addresses.&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="tel"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="The touch keyboard shows a number pad for telephone numbers." src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/7484.gfbtfs_2D00_image2_2D00_2.png" /&gt;&lt;br /&gt;The touch keyboard shows a number pad for telephone numbers.&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="url"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="The touch keyboard shows forward slash and &amp;ldquo;.com&amp;rdquo; for URLs." src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/4747.gfbtfs_2D00_image3_2D00_2.png" /&gt;&lt;br /&gt;The touch keyboard shows forward slash and &amp;ldquo;.com&amp;rdquo; for URLs.&lt;/p&gt;
&lt;h3&gt;&lt;img style="float: right; margin-left: 12px;" alt="Diagram showing relative finger widths and an average finger width of 11 mm" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-38-71-metablogapi/0624.gfbtfs_2D00_image4_2D00_2.png" /&gt;DO Provide Ample Room for Users&amp;rsquo; Fingers&lt;/h3&gt;
&lt;p&gt;To build Windows 8&amp;rsquo;s touch-first experience, we&amp;rsquo;ve done a ton of research to formulate some &lt;a href="http://bit.ly/win8touchguidance"&gt;helpful guidelines&lt;/a&gt; for developers. The average width of a finger is 11mm. As targets for tapping get larger, the percentage of accidental missed taps drops off quickly.&lt;/p&gt;
&lt;p&gt;Ideally, a target is &lt;em&gt;at least&lt;/em&gt; 11mm (about 40px) square with at least 2mm (about 10px) of padding around it.&lt;/p&gt;
&lt;table style="margin: auto; border-collapse: collapse;" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="padding: 5px;"&gt;
&lt;div style="background-color: #2a80ee; width: 40px; height: 40px;"&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style="padding: 5px;"&gt;
&lt;div style="background-color: #2a80ee; width: 40px; height: 40px;"&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style="padding: 5px;"&gt;
&lt;div style="border-top: 1px solid #666; border-right: 1px solid #666; border-bottom: 1px solid #666; width: 10px; height: 38px;"&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;40px or more target size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 5px 5px 2px 5px; text-align: center;" colspan="2"&gt;
&lt;div style="display: inline-block; border-left: 1px solid #666; border-right: 1px solid #666; border-bottom: 1px solid #666; width: 8px; height: 10px;"&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width: 100px; text-align: center;" colspan="2"&gt;10px or more between targets&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you want to adjust the spacing only for users with touch hardware, use feature detection.&lt;/p&gt;
&lt;p&gt;To detect that user has touch hardware:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (navigator.msMaxTouchPoints &amp;amp;&amp;amp; navigator.msMaxTouchPoints &amp;gt; 1) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: #006400;"&gt;// Supports multi-touch&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;h2 style="clear: both;"&gt;Going Beyond These Basics&lt;/h2&gt;
&lt;p&gt;You can do much more to create a great touch-first experience. For example, you may choose to optimize for touch by supporting custom multi-touch interactions or gestures. Here are a few links to get you started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/hh673549.aspx"&gt;IE 10 Developer Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh453816.aspx"&gt;Touch Zooming &amp;amp; Panning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh673557.aspx"&gt;Pointer &amp;amp; Gesture Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"&gt;Touch Input for IE10 and Metro style Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/p/?LinkId=232979"&gt;Handling Multi-touch and Mouse Input in All Browsers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We plan to write more about these methods in future blog posts. Applying these guidelines today will ensure your sites work well with touch in IE10.&lt;/p&gt;
&lt;p&gt;&amp;mdash; Jacob Rossi, Program Manager, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10295904" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>IE 9.0.6 Available via Windows Update</title><link>http://blogs.msdn.com/b/ie/archive/2012/04/10/ie-9-0-6-available-via-windows-update.aspx</link><pubDate>Tue, 10 Apr 2012 21:28:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10292416</guid><dc:creator>ieblog</dc:creator><slash:comments>31</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10292416</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/04/10/ie-9-0-6-available-via-windows-update.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://support.microsoft.com/kb/2675157"&gt;&lt;b&gt;April 2012 Cumulative Security Update for Internet Explorer&lt;/b&gt;&lt;/a&gt; is now available via &lt;a href="http://go.microsoft.com/fwlink/?LinkID=40747"&gt;&lt;b&gt;Windows Update&lt;/b&gt;&lt;/a&gt;. This security update resolves five privately reported vulnerabilities in Internet Explorer. The most severe vulnerabilities could allow remote code execution if a user visits a specially crafted Web page using Internet Explorer. An attacker who successfully exploited any of these vulnerabilities could gain the same user rights as the local user.&lt;i&gt; &lt;/i&gt;Users whose accounts are configured to have fewer user rights on the system could be less affected than users who operate with administrative user rights. &lt;/p&gt;
&lt;p&gt;This security update is rated Critical for Internet Explorer 6, Internet Explorer 7, Internet Explorer 8, and Internet Explorer 9 on Windows clients and Moderate for Internet Explorer 6, Internet Explorer 7, Internet Explorer 8, and Internet Explorer 9 on Windows servers. For more information, see the &lt;a href="http://technet.microsoft.com/en-us/security/bulletin/ms12-023"&gt;full bulletin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Most customers have enabled automatic updating and do not need to take any action. We recommend that customers, who have not enabled automatic updating, enable it (Start Menu, type “Windows Update”). We recommend that administrators, enterprise installations, and end users who want to install this security update manually, apply the update immediately using update management software or by checking for updates using the Microsoft Update service.&lt;/p&gt;
&lt;p&gt;—Tyson Storey, Program Manager, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10292416" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Security/">Security</category></item><item><title>Pinned Sites in Windows 8</title><link>http://blogs.msdn.com/b/ie/archive/2012/04/03/pinned-sites-in-windows-8.aspx</link><pubDate>Tue, 03 Apr 2012 20:42:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10290515</guid><dc:creator>ieblog</dc:creator><slash:comments>38</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10290515</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/04/03/pinned-sites-in-windows-8.aspx#comments</comments><description>&lt;script src="http://ie.microsoft.com/testdrive/IEBlog/Common/mp4VideoFailUseEmbed.js"
    type="text/javascript"&gt;&lt;/script&gt;
&lt;p&gt;The Windows 8 Start screen is the best place to find and stay connected to all your
    favorite apps and content. App tiles are alive with activity and show you fresh
    and tailored content so you know what’s new in your world.&lt;/p&gt;
&lt;p&gt;We’ve &lt;a href="http://blogs.msdn.com/b/b8/archive/2012/03/13/web-browsing-in-windows-8-consumer-preview-with-ie10.aspx"&gt;
    written about&lt;/a&gt; Internet Explorer 10’s Metro style browsing experience on Windows
    8. This post describes in detail IE10’s pinned sites and their availability on the
    Windows 8 Start screen—complete with site-centric visuals and badge notifications
    to let you know there is new content. We’ll also walk through the Web developer
    details to support pinned sites.&lt;/p&gt;
&lt;p&gt;The following video shows pinned sites in action on Windows 8 Consumer Preview.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;video style="width: 640px; height: 360px; border: 1px solid #999; outline: 0;" controls="controls"
        preload="metadata" onerror="mp4VideoFailUseEmbed(this)" onplay="this.blur();"&gt;
        &lt;source src="http://ie.microsoft.com/testdrive/ieblog/2012/mar/PinnedSitesInWindows8-16x9.mp4"
            type="video/mp4"&gt;&lt;/source&gt;
        &lt;embed style="width: 640px; height: 360px; border: 1px solid #999;" src="http://ie.microsoft.com/testdrive/IEBlog/Common/player.swf"
            type="application/x-shockwave-flash" wmode="opaque" allowscriptaccess="never"
            allowfullscreen="false" flashvars="file=http://ie.microsoft.com/testdrive/ieblog/2012/mar/PinnedSitesInWindows8-16x9.mp4&amp;autostart=false&amp;controlbar=over&amp;controlbar.idlehide=true&amp;bufferlength=0"&gt;&lt;/embed&gt;&lt;/video&gt;&lt;br /&gt;
    Pinned Sites in Windows 8&lt;/p&gt;
&lt;h2&gt;Pinned Sites – More than Favorites&lt;/h2&gt;
&lt;p&gt;Consumers on Windows spend most of their time on the Web and we know from Windows opt-in telemetry (officially, the &lt;a href="http://www.microsoft.com/products/ceip/EN-US/default.mspx"&gt;Microsoft Customer Experience Improvement Program&lt;/a&gt;), that they go back to the same set of sites time and again. Pinned sites on Windows 8 make it fast and easy to immediately get to your sites. With badge notifications, site tiles come alive with up-to-date information and help you know when new content is available.&lt;/p&gt;
&lt;p&gt;Developers can utilize pinned sites to better connect their site with their users and promote their site’s brand directly in the Windows start screen. We found that sites that used this feature with IE9 on Windows 7 see anywhere from &lt;a href="http://news.cnet.com/8301-10805_3-20031845-75.html"&gt;a 15 percent to 50 percent increase in site visits&lt;/a&gt;. In Windows 8 the experience for consumers is even better with site tile updates, even when you don’t have the site open in the browser.&lt;/p&gt;
&lt;p&gt;The following two screen shots illustrate pinned site tiles and badge notifications.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Pinned sites on the Start screen showing site-centric visuals and badge notifications"
        src="http://ieblog.members.winisp.net/images/20120403-psiw-image1.png" /&gt;&lt;br /&gt;
    Pinned sites on the Start screen showing site-centric visuals and badge notifications&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Example of a badge notification on a pinned site’s tile"
        src="http://ieblog.members.winisp.net/images/20120403-psiw-image1a.png" /&gt;&lt;br /&gt;
    Example of a badge notification on a pinned site’s tile&lt;/p&gt;
&lt;h2&gt;Site-Centric Visual on the Pinned Site Tile&lt;/h2&gt;
&lt;p&gt;As a Web developer, you can provide a site icon (&lt;a href="http://en.wikipedia.org/wiki/Favicon"&gt;favicon&lt;/a&gt;) that IE10 uses throughout the browser to
    represent the site, in the address bar, on the new tab page, and on the Start screen.
    IE10 uses the large site icon (32 x 32 pixels) to identify the site when pinned
    to the Start screen the same way that IE9 used it for pinning to the task bar.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot of pinning a site with Metro style IE10 showing a preview of the site’s tile"
        src="http://ieblog.members.winisp.net/images/20120403-psiw-image3.png" /&gt;&lt;br /&gt;
    Screen shot of pinning a site with Metro style IE10 showing a preview of the site’s
    tile&lt;/p&gt;
&lt;p&gt;IE10 extracts the dominant color from the icon and automatically uses it as
    the background color for the Start screen tile. &lt;/p&gt;
&lt;p&gt;One tool for creating icons is &lt;a href="http://www.xiconeditor.com/Default.aspx"&gt;
    x-icon editor&lt;/a&gt;. Use it to create the 32x32 icon for your site. It can also convert
    an image to the icon file format (.ico). Then associate the .ico using traditional 
    favicon markup:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;link&lt;/span&gt;
            &lt;span style="color: Red;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;testdrive.ico&amp;quot;&lt;/span&gt;
            &lt;span style="color: Red;"&gt;rel&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;shortcut icon&amp;quot;&lt;/span&gt;
            &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;h2&gt;Badge Notifications That Update In the Background&lt;/h2&gt;
&lt;p&gt;Windows 8 can poll for updates for pinned tiles on the Start screen. This works well
    for lightweight notifications such as new messages from other users (email &amp;amp;
    social networking), new discounts on a shopping site, new articles on a newsfeed
    etc. &lt;/p&gt;
&lt;p&gt;With Internet Explorer 10 and Windows 8, you can offer badge notifications directly
    on your pinned site tiles. This means users get updates to their sites without
    the site being open in the browser. As an example, pin the &lt;a href="http://ietestdrive2.com/pinnedsites/"&gt;
        Fresh Tweets demo&lt;/a&gt; using IE10 on Windows 8 Consumer Preview. The pinned site
    tile updates on a regular basis and notifies the user when there are new tweets available.
&lt;/p&gt;
&lt;p&gt;Background notifications require site-provided components. These are: (1) Badge Notification
    XML, an XML response that describes the badge notification for Windows, and (2)
    Pinned Site Meta Tags, Web page markup that points to the location which Windows
    should poll for notifications and the frequency of polling.&lt;/p&gt;
&lt;h3&gt;Badge Notification XML&lt;/h3&gt;
&lt;p&gt;Windows handles the polling and drawing of badge notifications. Windows polls the
    badge notification XML that describes the visual for the pinned site tile. The &lt;a
        href="http://msdn.microsoft.com/en-us/library/windows/apps/br212849.aspx"&gt;badge
        XML schema&lt;/a&gt; defines this simple XML response. For example, to update the tile with the number “3,” you send the following XML:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21);"&gt;xml&lt;/span&gt;
            &lt;span style="color: Red;"&gt;version&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span
                style="color: Blue;"&gt;1.0&lt;/span&gt;&amp;quot; &lt;span style="color: Red;"&gt;encoding&lt;/span&gt;&lt;span
                    style="color: Blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: Blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span
                        style="color: Blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21);"&gt;badge&lt;/span&gt;
            &lt;span style="color: Red;"&gt;value&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span
                style="color: Blue;"&gt;3&lt;/span&gt;&amp;quot;&lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;p&gt;Badges can be numbers or glyphs, such as ‘alert’ and ‘new message’ indicators. For
    a full list of what a badge can display, see &lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh761458.aspx"&gt;
        Choosing a badge image&lt;/a&gt; on MSDN.&lt;/p&gt;
&lt;h3&gt;Pinned Site Meta Tags &lt;/h3&gt;
&lt;p&gt;The next step is associating the badge notification XML to the Web page. IE10 uses
    the meta tag &lt;a href="http://msdn.microsoft.com/en-us/library/ie/gg491732(v=vs.85).aspx#application-name"&gt;
        “application-name”&lt;/a&gt; to determine if the Web page supports pinned sites capabilities
    like notifications and jump lists. To support badge notifications, include a new meta-tag in
    your markup with the URL of the badge
    notification XML and the frequency with which Windows should request it. IE checks
    to see if the “msApplication-badge” meta tag is present on the page at time of
    pinning, as well as on subsequent launches of the site from the pinned site tile.
&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;meta&lt;/span&gt;
            &lt;span style="color: Red;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;msapplication-badge&amp;quot;&lt;/span&gt;
            &lt;span style="color: Red;"&gt;value&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;frequency=360;polling-uri=http://ietestdrive2.com/PinnedSites/TweetCounter/microsoft/360&amp;quot;&lt;/span&gt;
            &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;p&gt;The value parameter has two parts: &lt;code&gt;polling-uri&lt;/code&gt; (required) and &lt;code&gt;
    frequency&lt;/code&gt; (optional).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;polling-uri&lt;/code&gt; is the absolute URI from which Windows requests the simple
    XML document defined above. &lt;/p&gt;
&lt;p style="margin-bottom: 0;"&gt;&lt;code&gt;frequency&lt;/code&gt; is an optional number of minutes
    between updates and must be one of the following values:&lt;/p&gt;
&lt;ul style="margin-top: 0;"&gt;
    &lt;li&gt;30 (Windows will poll the URI every 30 minutes)&lt;/li&gt;
    &lt;li&gt;60 (1 hour)&lt;/li&gt;
    &lt;li&gt;360 (6 hours)&lt;/li&gt;
    &lt;li&gt;720 (12 hours)&lt;/li&gt;
    &lt;li&gt;1440 (1 day. This is the default.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If &lt;code&gt;frequency&lt;/code&gt; is omitted or has a value other than one listed above,
    it defaults to daily updates (1440 minutes).&lt;/p&gt;
&lt;h3&gt;Developer APIs for updating Badge Notifications&lt;/h3&gt;
&lt;p&gt;You can also clear and refresh the site tile
    badge from the Web page directly to ensure that the site tile is up-to-date. &lt;/p&gt;
&lt;p&gt;When a user launches the pinned site tile through the Start screen, the Web site
    is running in its own session called SiteMode and can use the following JavaScript
    functions to update the badge.&lt;/p&gt;
&lt;p style="margin-left: 0.25in;"&gt;&lt;code style="font-weight: bold; font-size: 14px;"&gt;window.external.msSiteModeClearBadge()&lt;/code&gt;
    clears the badge notification on the tile. In the &lt;a href="http://ietestdrive2.com/pinnedsites/"&gt;
        Fresh Tweets demo&lt;/a&gt;, when the user receives a notification and taps on the
    tile to launch the browser, the Web page uses &lt;code&gt;msSiteModeClearBadge()&lt;/code&gt;
    to clear the notification from the tile. The next time the tile lights up with a
    badge update, the user knows there is new content.&lt;/p&gt;
&lt;p style="margin-left: 0.25in;"&gt;&lt;code style="font-weight: bold; font-size: 14px;"&gt;window.external.msSiteModeRefreshBadge()&lt;/code&gt;
    calls Windows to update the badge on the site using the polling URI. As an example,
    the user sees a pinned site tile indicating three unread messages and clicks on the tile to return to the site. If he or she reads only the first
    update, you can trigger an update so the badge reflects the correct read/unread count of two.&lt;/p&gt;
&lt;div style="padding: 0 0.25in;"&gt;
    &lt;p style="background-color: #f0f0f0; color: Black; padding: 8px;"&gt;In Windows 8 Consumer
        Preview, these two APIs only function on sites running in the Local intranet or
        Trusted sites zones. This will be fixed in the next preview. To test these APIs
        in the Consumer Preview on your own site, add its domain to the Trusted sites list
        using the Security tab of the Internet Properties dialog.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Desktop Taskbar Notifications&lt;/h3&gt;
&lt;p&gt;Notifications that appear as &lt;a href="http://msdn.microsoft.com/en-us/library/ie/gg491744(v=vs.85).aspx"&gt;
    icon overlays&lt;/a&gt; for pinned sites on the desktop taskbar will continue to work
    for Windows 8 and IE10 on the desktop. This form of notification is not available
    on the pinned site for the Windows 8 Start screen. Windows 8 handles notifications
    for all tiles on the Start screen and does so in a battery-efficient way.&lt;/p&gt;
&lt;h2&gt;Jump Lists to Quickly Navigate Within the Site &lt;/h2&gt;
&lt;p&gt;Many top sites such as NYTimes.com, CNN.com, and Amazon.com support IE9 pinned sites
    features such as &lt;a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie-9/features/pinned-sites"&gt;
        jump lists&lt;/a&gt; to get to a specific task or part of a site. With IE10, jump lists are available as part of the navigation
    bar for a touch-friendly way to navigate the site. &lt;/p&gt;
&lt;p&gt;When the user launches the site from the Start screen, the pin button shows that there are
    jump lists available for this site:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot showing the Fresh Tweets Demo’s jump list"
        src="http://ieblog.members.winisp.net/images/20120403-psiw-image4.png" /&gt;&lt;br /&gt;
    Screen shot showing the Fresh Tweets Demo’s jump list&lt;/p&gt;
&lt;p&gt;The jump list displayed is the same as IE9 displays on the Windows 7 taskbar.
&lt;/p&gt;
&lt;p&gt;You can add static tasks to your site’s jump list via page markup (&lt;a href="http://msdn.microsoft.com/en-us/library/gg491725(v=vs.85).aspx"&gt;learn
    more&lt;/a&gt;) or dynamically based on user interactions (&lt;a href="http://msdn.microsoft.com/en-us/library/gg491724(v=vs.85).aspx"&gt;learn
        more&lt;/a&gt;). Badge and jump lists in Windows 8 are a site-centric feature. Each
    fully qualified domain name can have one and only one set of polling data and jump
    list data. &lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Internet Explorer 10 puts sites at the center of the experience through integration
    with the Windows 8 Start screen. Web developers can create site-centric visuals for pinned site tiles, share
    when there are new updates available for the site, and offer jump lists to navigate
    quickly around the site. &lt;/p&gt;
&lt;p&gt;We look forward to you adding these simple features to your Web site to maximize their impact in Windows 8.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Rahul Lalmalani, Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10290515" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/End_2D00_users/">End-users</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Launch Options for Internet Explorer 10 on Windows 8</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/26/launch-options-for-internet-explorer-10-on-windows-8.aspx</link><pubDate>Mon, 26 Mar 2012 16:24:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10287622</guid><dc:creator>ieblog</dc:creator><slash:comments>52</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10287622</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/26/launch-options-for-internet-explorer-10-on-windows-8.aspx#comments</comments><description>&lt;p&gt;IE10 is a &lt;a href="http://blogs.msdn.com/b/b8/archive/2012/03/13/web-browsing-in-windows-8-consumer-preview-with-ie10.aspx"&gt;
    new browsing experience&lt;/a&gt; built in lockstep with Windows 8 to give you all the
    advantages that Metro style applications offer. We built that experience by extending
    IE’s underlying architecture to provide a fast, fully hardware accelerated browsing
    engine with strong security and support for HTML5 and other Web standards. IE10
    also includes a desktop experience for when you are using desktop tools and wish
    to continue using them in your existing workflows.&lt;/p&gt;
&lt;p&gt;Following last September’s release of the Windows 8 Developer Preview, we heard a
    lot about giving you the option to control which experience of Internet Explorer—Metro
    style or on the desktop —to launch when clicking a link in another application.
    In the Windows Consumer Preview, IE10 offers you that control.&lt;/p&gt;
&lt;p&gt;By default, Windows 8 Consumer Preview opens links using the flavor of Internet Explorer
    that matches your current environment: if you’re running a Metro style application,
    following a link launches Metro style IE10; if you’re running a desktop application,
    following a link launches IE10 on the desktop. You can override this default behavior using
    the Programs tab of the Internet Properties dialog.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot of the Programs tab of the Windows 8 Internet Properties dialog showing the option for choosing how Internet Explorer opens links." src="http://ieblog.members.winisp.net/images/20120326-blecl-blecl-blecl-image1.png" /&gt;&lt;/p&gt;
&lt;p&gt;You can locate these settings quickly by using the Start screen’s search capability
    and searching for terms such as “links,” “launch,” or “open links.” Show below is
    the result of search for the term “launch.”&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot of a Settings section of the Windows 8 Start search results page when &amp;quot;launch&amp;quot; is searched for. &amp;quot;Choose how you open Internet Explorer&amp;quot; is selected in the search results." src="http://ieblog.members.winisp.net/images/20120326-blecl-blecl-blecl-image2.png" /&gt;&lt;/p&gt;
&lt;p&gt;The following sections describe the available settings. &lt;/p&gt;
&lt;link href="http://ieblog.members.winisp.net/images/20120326-blecl-style1.css" rel="stylesheet" type="text/css" /&gt;
&lt;h2&gt;Opening Links&lt;/h2&gt;
&lt;p&gt;The first setting of the Browser Launch Settings (labeled “Choose how you open links”)
    controls what happens when you click a link in another program. Your choices include:&lt;/p&gt;
&lt;table class="blecl" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"&gt;
    &lt;tr&gt;
        &lt;th&gt;Options for Opening Links&lt;/th&gt;
        &lt;th&gt;Behavior&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Let Internet Explorer decide&lt;/td&gt;
        &lt;td&gt;Launch links based on the environment you are in&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Always in Internet Explorer&lt;/td&gt;
        &lt;td&gt;Launch links in the Windows 8 (Metro style) environment&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;Always in Internet Explorer on the desktop&lt;/td&gt;
        &lt;td&gt;Launch links in the desktop environment&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;The default for this setting is “Let Internet Explorer decide.” In other words, links
    will launch into the appropriate experience based on the invoking context—desktop
    or Metro style. Links will open in the desktop IE10 when a link is clicked from
    a desktop application, for example, Microsoft Word, and in Metro style IE10 when
    a link is opened from a Metro style application. &lt;/p&gt;
&lt;h2&gt;Opening Internet Explorer from the Start Screen&lt;/h2&gt;
&lt;p&gt;In addition to controlling how Windows opens links, the Browser Launch Settings also
    provide users with options on how Internet Explorer application tiles launch from the Start
    screen. Internet Explorer’s application tile is the default launching point for
    the browser on the Start screen. You create pinned site tiles when you pin sites
    to the Start screen. The setting “Open Internet Explorer tiles on the desktop” controls
    what happens when you click the Internet Explorer or pinned site tile. &lt;/p&gt;
&lt;table class="blecl" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"&gt;
    &lt;tr&gt;
        &lt;th&gt;Options for opening Internet Explorer Tiles&lt;/th&gt;
        &lt;th&gt;Expected behavior&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;(unchecked)&lt;/td&gt;
        &lt;td&gt;Launch in the Windows 8 (Metro style) environment&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;(checked)&lt;/td&gt;
        &lt;td&gt;Launch in the desktop environment&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;
&lt;h2&gt;Launch Options and Browser Defaults&lt;/h2&gt;
&lt;p&gt;IE10 is available in both Metro style and desktop experiences when it is the default
    browser. If Internet Explorer is not your default browser, only desktop IE is available
    and you cannot change IE’s Browser Launch Settings. The “Choose how you open links”
    option on the Programs tab of the Internet Properties dialog will be disabled (“grayed
    out”) when IE is not the default browser:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot of the Programs tab of the Windows 8 Internet Properties dialog showing the option for choosing how Internet Explorer opens links disabled because IE10 is not the default browser." src="http://ieblog.members.winisp.net/images/20120326-blecl-blecl-blecl-image3.png" /&gt;&lt;/p&gt;
&lt;p&gt;To change the default browser, type “default” on the Windows 8 Start screen. The Start screen will search apps,
    settings, and files for this term. The Apps results will include Default Programs.
    Touch or click it to bring up the Default Programs control panel item. From its
    list of options, select “Set your default programs” to display a page containing
    a list of programs on the left.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Screen shot of the Set Default Programs control panel item showing &amp;quot;Internet Explorer&amp;quot; selected in the list of programs and &amp;quot;Set this program as default&amp;quot; being selected." src="http://ieblog.members.winisp.net/images/20120326-blecl-siatdb-image1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Select “Internet Explorer” and then click or touch “Set this program as default.”
    This will set IE10 as the default browser on Windows 8 and enable its Metro style
    experience.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;IE10 offers you a full-screen, immersive site experience. We’ve found that many people
    – even those with the most enthusiastic and intense browsing patterns – prefer Metro
    style browsing because it’s less manual and more focused on what you browse than
    on how you browse. That said, for some browsing, IE on the desktop continues to
    play an important role. The Browser Launch Settings allow you to change the default
    settings for a “&lt;a href="http://blogs.msdn.com/b/b8/archive/2011/08/31/designing-for-metro-style-and-the-desktop.aspx"&gt;no
        compromises&lt;/a&gt;” experience.&lt;/p&gt;
&lt;p&gt;Try out these settings, and let us know what you think. We look forward to your feedback
    here and on &lt;a href="http://connect.microsoft.com/ie"&gt;Connect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;—Kevin Luu, Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10287622" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/End_2D00_users/">End-users</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Speed and Mobility: An Approach for HTTP 2.0 to Make Mobile Apps and the Web Faster</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/25/speed-and-mobility-an-approach-for-http-2-0-to-make-mobile-apps-and-the-web-faster.aspx</link><pubDate>Mon, 26 Mar 2012 04:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10287416</guid><dc:creator>ieblog</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10287416</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/25/speed-and-mobility-an-approach-for-http-2-0-to-make-mobile-apps-and-the-web-faster.aspx#comments</comments><description>&lt;p class="NoSpacing"&gt;This week begins face to face meetings at the IETF on how to approach HTTP 2.0 and improve the Internet. How the industry moves forward together on the next version of HTTP &amp;ndash; how every application and service on the Web communicates today &amp;ndash; can have a positive impact on user experience, operational and environmental costs, and even the battery life of the devices you carry around.&lt;/p&gt;
&lt;p class="NoSpacing"&gt;As part of this discussion of HTTP 2.0, Microsoft will &lt;a title="submit to the IETF a proposal for &amp;amp;ldquo;HTTP Speed+Mobility.&amp;amp;rdquo;" href="http://tools.ietf.org/html/draft-montenegro-httpbis-speed-mobility/"&gt;submit to the IETF a proposal for &amp;ldquo;HTTP Speed+Mobility.&amp;rdquo;&lt;/a&gt;&amp;nbsp; The approach we propose focuses on Web performance improvements at the same time it takes into account the important needs of mobile devices and applications.&lt;/p&gt;
&lt;p class="NoSpacing"&gt;You can &lt;a href="http://blogs.msdn.com/b/interoperability/archive/2012/03/26/speed-and-mobility-an-approach-for-http-2-0-to-make-mobile-apps-and-the-web-faster.aspx"&gt;read more here&lt;/a&gt; about this proposal and an approach to HTTP 2.0 which considers network speed, cost, and device battery life, and works for everyone from sites owners, content providers, to consumers.&lt;/p&gt;
&lt;p&gt;-- Rob Mauceri, Group Program Manager, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10287416" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Platform/">Platform</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Performance/">Performance</category></item><item><title>IndexedDB Updates for IE10 and Metro style apps</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/21/indexeddb-updates-for-ie10-and-metro-style-apps.aspx</link><pubDate>Wed, 21 Mar 2012 20:12:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10286045</guid><dc:creator>ieblog</dc:creator><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10286045</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/21/indexeddb-updates-for-ie10-and-metro-style-apps.aspx#comments</comments><description>&lt;p&gt;The Internet Explorer team along with the broader Web community has continued to make improvements to the &lt;a href="http://msdn.microsoft.com/library/hh673548.aspx"&gt;IndexedDB&lt;/a&gt; specification. &lt;a href="http://msdn.microsoft.com/library/hh673548.aspx"&gt;IndexedDB&lt;/a&gt; is a &lt;a href="http://www.w3.org/TR/IndexedDB/"&gt;W3C Working Draft&lt;/a&gt; that enables you to store, search, and retrieve data on the user's device, even when &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/27/building-offline-experiences-with-html5-appcache-and-indexeddb.aspx"&gt;Internet connectivity is disabled&lt;/a&gt;.  IndexedDB is a feature of the Web platform shared by IE10 and Metro style apps in the Windows 8 Consumer Preview.&lt;/p&gt;
&lt;p&gt;This blog post describes changes we made in Internet Explorer 10 Consumer preview to implement the latest version of the W3C spec.&lt;/p&gt;
&lt;h2&gt;Changes to Versioning&lt;/h2&gt;
&lt;p&gt;The most significant change involves how developers update their database schemas (i.e. object stores, indexes) from one version to the next.  The working group (including Microsoft) decided to replace the &lt;code&gt;IDBDatabase.setVersion&lt;/code&gt; API with a new &lt;code&gt;IDBFactory.open&lt;/code&gt; API.  The new &lt;code&gt;open&lt;/code&gt; API uses an additional parameter to detect if you want to use the current database version of the or if you want to update the database schema to a newer version.  The &lt;code&gt;open&lt;/code&gt; API now returns an &lt;code&gt;IDBOpenDBRequest&lt;/code&gt; object which lets you register for the onupgradeneeded event.  In the event handler you can update your database schema by adding additional object stores and indexes.&lt;/p&gt;
&lt;p&gt;To update your existing code, add a &lt;code&gt;version&lt;/code&gt; parameter to your &lt;code&gt;open&lt;/code&gt; method, replacing the call to &lt;code&gt;setVersion&lt;/code&gt;, and register a new &lt;code&gt;onupgradeneeded&lt;/code&gt; event handler on the &lt;code&gt;IDBOpenDBRequest&lt;/code&gt; (see below).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Old code example – &lt;span style="background-color:Lime;"&gt;green highlights&lt;/span&gt; the impacted code&lt;/b&gt;&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; openDBTest(dbName) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; rq = &lt;span style="background-color: Lime;"&gt;window.msIndexedDB.open(dbName)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onsuccess = successOpenningDB;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onerror = failureHandler;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; successOpenningDB(evt) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; db = evt.target.result;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; rq = &lt;span style="background-color: Lime;"&gt;db.setVersion(&lt;span style="color: Maroon;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onsuccess = successHandler;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onerror = failureHandler;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; successHandler(evt) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;//create schema&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;&lt;b&gt;New code example – &lt;span style="background-color:Yellow;"&gt;yellow highlights&lt;/span&gt; the changed code&lt;/b&gt;&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; openDBTest(dbName) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; rq = &lt;span style="background-color:Yellow;"&gt;window.msIndexedDB.open(dbName, 1)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onsuccess = useDB;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="background-color:Yellow;"&gt;rq.onupgradeneeded&lt;/span&gt; = successHandler;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;rq.onerror = failureHandler;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; successHandler(evt) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;//create schema&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h2&gt;Additional Changes&lt;/h2&gt;
&lt;p style="margin-bottom:0;"&gt;In addition, we made several smaller (but still significant) changes to the platform:&lt;/p&gt;
&lt;ul style="margin-top:0;"&gt;
&lt;li&gt;Added the &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-advance-void-unsigned-long-count"&gt;&lt;code&gt;IDBCursor.advance(count)&lt;/code&gt;&lt;/a&gt; method.  This method enables you to skip records in a cursor, which in turn enables pagination scenarios.  The &lt;code&gt;count&lt;/code&gt; parameter defines the number of records you want to skip before accessing data.  Valid values are 1 or greater.&lt;/li&gt;
&lt;li&gt;Added the &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-count-IDBRequest-any-key"&gt;&lt;code&gt;IDBObjectStore.count(key)&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBIndex-count-IDBRequest-any-key"&gt;&lt;code&gt;IDBIndex.count(key)&lt;/code&gt;&lt;/a&gt; methods.  These enable you to count the records that match specific criteria.  If the key value is not specified, a count of all records inside the index or the object store is returned.&lt;/li&gt;
&lt;li&gt;Added the &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBFactory-cmp-short-any-first-any-second"&gt;&lt;code&gt;IDBFactory.cmp(first, second)&lt;/code&gt;&lt;/a&gt; method.  This method compares two key values to determine if one value is greater than the other or both values are equal.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IDBKeyRanges&lt;/code&gt; now work with additional methods, including &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-count-IDBRequest-any-key"&gt;&lt;code&gt;IDBObjectStore.count&lt;/code&gt;&lt;/a&gt;, &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBObjectStore-delete-IDBRequest-any-key"&gt;&lt;code&gt;IDBObjectStore.delete&lt;/code&gt;&lt;/a&gt;, &lt;a href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBIndex-count-IDBRequest-any-key"&gt;&lt;code&gt;IDBIndex.count&lt;/code&gt;&lt;/a&gt;.  This allows you to match records that span groups of key values.&lt;/li&gt;
&lt;li&gt;Values being added to the database needed no longer need to satisfy all previously defined indexes.  This allows you to add records to an &lt;code&gt;IDBObjectStore&lt;/code&gt; that fall outside the limits of previously defined indexes.&lt;/li&gt;
&lt;li&gt;If an exception is thrown within the context of an active transaction, the transaction is aborted.  This implies that if an exception is thrown within the &lt;code&gt;onsuccess&lt;/code&gt; event handler of any request, the active transaction will be aborted.  However, handling the exception will allow the database transaction to continue as normal.&lt;br/&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 4px 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// This won’t abort the transaction because there is no active transaction.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; createTransaction() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; txn = db.transaction(&lt;span style="color: Maroon;"&gt;&amp;quot;test&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;window.aaaaaa();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// This will abort the transaction because the exception is thrown when there is an active transaction.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; rq = objectStore.add(record);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;rq.onsuccess = &lt;span style="color: Blue;"&gt;function&lt;/span&gt; (event) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;window.aaaaaa();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Added support to index properties on a Blob.  This allows you to download binary data from the Web, store it locally, and use blob properties (e.g. name, size, etc.) as indexes or unique keys into the blob.  This functionality enables scenarios like offline listening of your music collection or viewing of images and videos, while having the ability to search through your collection using the blob’s name. Our latest IE Test drive demo shows you how you can use this functionality to &lt;a href="http://ietestdrive2.com/OfflineSocialAlbums/"&gt;view your Facebook albums offline&lt;/a&gt;.&lt;/li&gt;
&lt;p style="margin-left: 0.5in; text-align: center; vertical-align: top; font-size: 8.25pt; font-style: italic;"&gt;&lt;img alt="Screen shot of the IE Test Drive demo Facebook Companion" style="max-width: 80%;" src="http://ieblog.members.winisp.net/images/20120321-iufiamsa-image1.jpg" /&gt;&lt;br /&gt;Screen shot of IE Test Drive demo &lt;a href="http://ietestdrive2.com/OfflineSocialAlbums/"&gt;Facebook Companion&lt;/a&gt;&lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;We also submitted &lt;a href="http://lists.w3.org/Archives/Public/public-webapps-testsuite/2012Mar/0002.html"&gt;over 100 test cases&lt;/a&gt; to the W3C working group for IndexedDB, including new tests and updates to existing tests.&lt;/p&gt;
&lt;h2&gt;Controlling How Sites and Apps use IndexedDB&lt;/h2&gt;
&lt;p style="margin-bottom:0;"&gt;In addition to updates to match changes in the W3C specification, the Windows 8 Consumer Preview includes improvements that allow users to remain in control of how sites and apps use IndexedDB on their devices:&lt;/p&gt;
&lt;ul style="margin-top:0;"&gt;
&lt;li&gt;Introduced an uninstall handler for Metro style apps that use indexedDB.  This handler ensures that any time end-users remove an application, the related data in the app’s IndexedDB database will be automatically deleted during the uninstall process.&lt;/li&gt;
&lt;li&gt;Implemented a quotas (storage limits) to prevent sites from exhausting disk space.  Quota limits can be updated by IT Admins via group policy settings or by users with administrative access to the Registry.   However, quotas don’t apply to Metro style apps.&lt;/li&gt;
&lt;li&gt;Added a new browser interface for end-users to manage their databases and manage quotas.  Users can use the Caches and databases dialog to remove individual databases.  Alternatively, you can remove all databases using the Delete Browsing History dialog to select the “Cookies and Web site data” checkbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-left: 0.5in; text-align: center; vertical-align: top; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 45%; vertical-align: top;" alt="Screen shot of the new Caches and databases tab of the Website Data Settings dialog. This allows you to control whether websites may create caches and databases and how large those caches and databases may be." src="http://ieblog.members.winisp.net/images/20120321-iufiamsa-image2.png" /&gt;&lt;img style="margin-left: 5%; max-width: 45%; vertical-align: top;" alt="Screen shot of the updated Delete Browsing History dialog showing the new wording of the Cookies option to include web site data, specifically databases created by Web sites." src="http://ieblog.members.winisp.net/images/20120321-iufiamsa-image3.png" /&gt;&lt;br /&gt;
Screen shots of the new Caches and databases tab of the Website Data Settings dialog and the updated Delete Browsing History dialog&lt;/p&gt;
&lt;h2&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;The W3C &lt;a href="https://www.w3.org/Bugs/Public/buglist.cgi?product=WebAppsWG&amp;amp;component=Indexed%20Database%20API&amp;amp;resolution=---"&gt;WebApp Working Group&lt;/a&gt; continues to drive IndexedDB to completion by making important improvements and reducing the number and scope of changes made to the spec.  This is an important step for Web developers building on this technology in the near future, including in Windows 8 and IE10.&lt;/p&gt;
&lt;p&gt;We look forward to seeing how you use IndexedDB in your sites and apps, and welcome your feedback on IndexedDB in IE10.&lt;/p&gt;
&lt;p&gt;—Israel Hilerio, Ph.D., Principal Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10286045" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>WebSockets in Windows Consumer Preview</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/19/websockets-in-windows-consumer-preview.aspx</link><pubDate>Mon, 19 Mar 2012 21:59:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10285146</guid><dc:creator>ieblog</dc:creator><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10285146</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/19/websockets-in-windows-consumer-preview.aspx#comments</comments><description>&lt;p&gt;In Windows 8 Consumer Preview and Server Beta, IE10 and all other Microsoft WebSocket client and server features now support the final version of the &lt;a href="http://www.rfc-editor.org/rfc/rfc6455.txt"&gt;IETF WebSocket Protocol&lt;/a&gt;. In addition, IE10 implements the W3C &lt;a href="http://www.w3.org/TR/websockets/"&gt;WebSocket API&lt;/a&gt; Candidate Recommendation.&lt;/p&gt;
&lt;p&gt;WebSockets are stable and ready for developers to start creating innovative applications and services. This post provides a simple introduction to the W3C &lt;a href="http://www.w3.org/TR/websockets/"&gt;WebSocket API&lt;/a&gt; and its underlying &lt;a href="http://www.rfc-editor.org/rfc/rfc6455.txt"&gt;WebSocket protocol&lt;/a&gt;. The updated &lt;a href="https://websockets.interop.msftlabs.com/flipbook/"&gt;Flipbook demo&lt;/a&gt; uses the latest version of the API and protocol.&lt;/p&gt;
&lt;p&gt;In my &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/15/site-ready-websockets.aspx"&gt;previous post&lt;/a&gt;, I introduced WebSocket scenarios:&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;WebSockets enable Web applications to deliver real-time notifications and updates in the browser. Developers have faced problems in working around the limitations in the browser’s original HTTP request-response model, which was not designed for real-time scenarios. WebSockets enable browsers to open a bidirectional, full-duplex communication channel with services. Each side can then use this channel to immediately send data to the other. Now, sites from social networking and games to financial sites can deliver better real-time scenarios, ideally using same markup across different browsers.&lt;/em&gt;&lt;/blockquote&gt;
&lt;p&gt;Since that September 2011 post, the working groups have made significant progress. The WebSocket protocol is now an &lt;a href="http://www.rfc-editor.org/rfc/rfc6455.txt"&gt;IETF proposed standard protocol&lt;/a&gt;. In addition, the W3C &lt;a href="http://www.w3.org/TR/websockets/"&gt;WebSocket API&lt;/a&gt; is a W3C Candidate Recommendation.&lt;/p&gt;
&lt;h2&gt;Introduction to the WebSocket API Using an Echo Example&lt;/h2&gt;
&lt;p&gt;The code snippets below use a simple echo server created with ASP.NET’s &lt;a href="http://msdn.microsoft.com/en-us/library/hh160729(v=vs.110).aspx"&gt;System.Web.WebSockets&lt;/a&gt; namespace to echo back text and binary messages that are sent from the application. The application allows the user to type in text to be sent and echoed back as a text message or draw a picture that can be sent and echoed back as a binary message.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot of WebSockets echo sample application." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image1-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;For a more complex example that allows you to experiment with latency and performance differences between WebSockets and HTTP polling, see the &lt;a href="https://websockets.interop.msftlabs.com/flipbook/"&gt;Flipbook demo&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Details of Connecting to a WebSocket Server&lt;/h2&gt;
&lt;p&gt;This simple explanation is based on a direct connection between the application and the server. If a proxy is configured, then IE10 starts the process by sending a HTTP CONNECT request to the proxy.&lt;/p&gt;
&lt;p&gt;When a WebSocket object is created, a handshake is exchanged between the client and the server to establish the WebSocket connection. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating an HTTP GET Upgrade Request from an HTTP Client to an HTTP Server." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image2-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;IE10 starts the process by sending a HTTP request to the server:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;GET /echo HTTP/1.1&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Host: example.microsoft.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Upgrade: websocket&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Connection: Upgrade&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Origin: http://microsoft.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Sec-WebSocket-Version: 13&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Let’s look at each part of this request.&lt;/p&gt;
&lt;p&gt;The connection process starts with a standard HTTP GET request which allows the request to traverse firewalls, proxies, and other intermediaries:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;GET /echo HTTP/1.1&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Host: example.microsoft.com&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The HTTP &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.42"&gt;Upgrade header&lt;/a&gt; requests that the server switch the application-layer protocol from HTTP to the WebSocket protocol. &lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Upgrade: websocket&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Connection: Upgrade&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The server transforms the value in the Sec-WebSocket-Key header in its response to demonstrate that it understands the WebSocket protocol:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The Origin header is set by IE10 to allow the server to enforce &lt;a href="http://tools.ietf.org/html/rfc6454"&gt;origin-based security&lt;/a&gt;.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Origin: http://microsoft.com&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The Sec-WebSocket-Version header identifies the requested protocol version. Version 13 is the final version in the IETF proposed standard:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Sec-WebSocket-Version: 13&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;If the server accepts the request to upgrade the application-layer protocol, it returns a &lt;a href="http://tools.ietf.org/html/rfc2616#section-10.1.2"&gt;HTTP 101 Switching Protocols&lt;/a&gt; response:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating an HTTP 101 Switching Protocols Respsonse from an HTTP Server Client to an HTTP Client." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image3.png" /&gt;&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;HTTP/1.1 101 Switching Protocols&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Upgrade: websocket&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Connection: Upgrade&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;To demonstrate that it understands the WebSocket Protocol, the server performs a standardized transformation on the Sec-WebSocket-Key from the client request and returns the results in the Sec-WebSocket-Accept header:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;IE10 then compares Sec-WebSocket-Key with Sec-WebSocket-Accept to validate that the server is a WebSocket server and not a HTTP server with delusions of grandeur.&lt;/p&gt;
&lt;p&gt;The client handshake established a HTTP-on-TCP connection between IE10 and server. After the server returns its 101 response, the application-layer protocol switches from HTTP to WebSockets which uses the previously established TCP connection.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;HTTP is completely out of the picture at this point.&lt;/b&gt; Using the lightweight WebSocket wire protocol, messages can now be sent or received by either endpoint at any time.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating WebSocket messages being sent between two Web sockets." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image4.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Programming Connecting to a WebSocket Server&lt;/h2&gt;
&lt;p&gt;The WebSocket protocol defines &lt;a href="http://tools.ietf.org/html/rfc6455#section-3"&gt;two new URI schemes&lt;/a&gt; which are similar to the HTTP schemes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;"ws:" "//" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.2.2"&gt;host&lt;/a&gt; [ ":" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.2.3"&gt;port&lt;/a&gt; ] &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.3"&gt;path&lt;/a&gt; [ "?" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.4"&gt;query&lt;/a&gt; ] is modeled on the “http:” scheme. Its default port is 80. It is used for unsecure (unencrypted) connections.&lt;/li&gt;
&lt;li&gt;"wss:" "//" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.2.2"&gt;host&lt;/a&gt; [ ":" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.2.3"&gt;port&lt;/a&gt; ] &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.3"&gt;path&lt;/a&gt; [ "?" &lt;a href="http://tools.ietf.org/html/rfc3986#section-3.4"&gt;query&lt;/a&gt; ] is modeled on the “https:” scheme. Its default port is 443. It is used for secure connections tunneled over &lt;a href="http://tools.ietf.org/html/rfc2818"&gt;Transport Layer Security&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When proxies or network intermediaries are present, there is a higher probability that secure connections will be successful, as intermediaries are less inclined to attempt to transform secure traffic.&lt;/p&gt;
&lt;p&gt;The following code snippet establishes a WebSocket connection:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; host = &lt;span style="color: Maroon;"&gt;&amp;quot;ws://example.microsoft.com&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; socket = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; WebSocket(host);&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h3&gt;ReadyState – Ready … Set … Go …&lt;/h3&gt;
&lt;p&gt;The WebSocket.readyState attribute represents the state of the connection: CONNECTING, OPEN, CLOSING, or CLOSED. When the WebSocket is first created, the readyState is set to CONNECTING. When the connection is established, the readyState is set to OPEN. If the connection fails to be established, then the readyState is set to CLOSED.&lt;/p&gt;
&lt;h3&gt;Registering for Open Events&lt;/h3&gt;
&lt;p&gt;To receive notifications when the connection has been created, the application must register for open events.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;socket.onopen = &lt;span style="color: Blue;"&gt;function&lt;/span&gt; (openEvent) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;quot;serverStatus&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: Maroon;"&gt;&amp;#39;Web Socket State::&amp;#39;&lt;/span&gt; + &lt;span style="color: Maroon;"&gt;&amp;#39;OPEN&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;};&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h2&gt;Details Behind Sending and Receiving Messages&lt;/h2&gt;
&lt;p&gt;After a successful handshake, the application and the Websocket server may exchange WebSocket messages. A message is composed as a sequence of one or more message fragments or data “frames.” &lt;/p&gt;
&lt;p style="margin-bottom:0;"&gt;Each frame includes information such as:&lt;/p&gt;
&lt;ul style="margin-top:0;"&gt;
&lt;li&gt;Frame length&lt;/li&gt;
&lt;li&gt;Type of message (binary or text) in the first frame in the message&lt;/li&gt;
&lt;li&gt;A flag (FIN) indicating whether this is the last frame in the message&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating the contents of WebSocket frames." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image5.png" /&gt;&lt;/p&gt;
&lt;p&gt;IE10 reassembles the frames into a complete message before passing it to the script.&lt;/p&gt;
&lt;h2&gt;Programming Sending and Receiving Messages&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;send&lt;/code&gt; API allows applications to send messages to a Websocket server as UTF-8 text, &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/01/working-with-binary-data-using-typed-arrays.aspx"&gt;ArrayBuffers&lt;/a&gt;, or Blobs.&lt;/p&gt;
&lt;p&gt;For example, this snippet retrieves the text entered by the user and sends it to the server as a UTF-8 text message to be echoed back. It verifies that the Websocket is in an OPEN readyState:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; sendTextMessage() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (socket.readyState != WebSocket.OPEN)&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; e = document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;quot;textmessage&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;socket.send(e.value);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;This snippet retrieves the image drawn by the user in a canvas and sends it to the server as a binary message:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; sendBinaryMessage() {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (socket.readyState != WebSocket.OPEN)&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; sourceCanvas = document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;#39;source&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// msToBlob returns a blob object from a canvas image or drawing&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;socket.send(sourceCanvas.msToBlob());&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// ...&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h3&gt;Registering for Message Events&lt;/h3&gt;
&lt;p&gt;To receive messages, the application must register for message events. The event handler receives a MessageEvent which contains the data in MessageEvent.data. Data can be received as text or binary messages. &lt;/p&gt;
&lt;p&gt;When a binary message is received, the WebSocket.binaryType attribute controls whether the message data is returned as a Blob or an ArrayBuffer datatype. The attribute can be set to either “blob” or “arraybuffer.” &lt;/p&gt;
&lt;p&gt;The examples below use the default value which is “blob.”&lt;/p&gt;
&lt;p&gt;This snippet receives the echoed image or text from the websocket server. If the data is a Blob, then an image was returned and is drawn in the destination canvas; otherwise, a UTF-8 text message was returned and is displayed in a text field.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;socket.onmessage = &lt;span style="color: Blue;"&gt;function&lt;/span&gt; (messageEvent) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (messageEvent.data &lt;span style="color: Blue;"&gt;instanceof&lt;/span&gt; Blob) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; destinationCanvas = document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;#39;destination&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; destinationContext = destinationCanvas.getContext(&lt;span style="color: Maroon;"&gt;&amp;#39;2d&amp;#39;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; image = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; Image();&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;image.onload = &lt;span style="color: Blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;destinationContext.clearRect(0, 0, destinationCanvas.width, destinationCanvas.height);&lt;/p&gt;
&lt;p style="margin: 0 0 0 10em;"&gt;destinationContext.drawImage(image, 0, 0);&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;image.src = URL.createObjectURL(messageEvent.data);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;} &lt;span style="color: Blue;"&gt;else&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;quot;textresponse&amp;quot;&lt;/span&gt;).value = messageEvent.data;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;};&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h2&gt;Details of Closing a WebSocket Connection&lt;/h2&gt;
&lt;p&gt;Similar to the opening handshake, there is a closing handshake. Either endpoint (the application or the server) can initiate this handshake.&lt;/p&gt;
&lt;p&gt;A special kind of frame – a close frame – is sent to the other endpoint. The close frame may contain an optional status code and reason for the close. The protocol defines a set of appropriate &lt;a href="http://tools.ietf.org/html/rfc6455#section-7.4"&gt;values&lt;/a&gt; for the status code. The sender of the close frame must not send further application data after the close frame. &lt;/p&gt;
&lt;p&gt;When the other endpoint receives the close frame, it responds with its own close frame in response. It may send pending messages prior to responding with the close frame. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating the Close frame message and response." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image6.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Programming Closing a WebSocket and Registering for Close Events&lt;/h2&gt;
&lt;p&gt;The application initiates the close handshake on an open connection with the &lt;code&gt;close&lt;/code&gt; API:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;socket.close(1000, &lt;span style="color: Maroon;"&gt;&amp;quot;normal close&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;To receive notifications when the connection has been closed, the application must register for close events.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;socket.onclose = &lt;span style="color: Blue;"&gt;function&lt;/span&gt; (closeEvent) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;quot;serverStatus&amp;quot;&lt;/span&gt;).innerHTML = &lt;span style="color: Maroon;"&gt;&amp;#39;Web Socket State::&amp;#39;&lt;/span&gt; + &lt;span style="color: Maroon;"&gt;&amp;#39;CLOSED&amp;#39;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}; &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The &lt;code&gt;close&lt;/code&gt; API accepts two optional parameters: a status code as defined by the protocol and a description.  The status code must be either 1000 or in the range 3000 to 4999. When close is executed, the readyState attribute is set to CLOSING. After IE10 receives the close response from the server, the readyState attribute is set to CLOSED and a close event is fired.&lt;/p&gt;
&lt;h2&gt;Using Fiddler to See WebSockets Traffic&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; is a popular HTTP debugging proxy. There is some support in the latest versions for the WebSocket protocol. You can inspect the headers exchanged in the WebSocket handshake:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot of Fiddler showing a WebSocket request." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image7.png" /&gt;&lt;/p&gt;
&lt;p&gt;All the WebSocket messages are also logged. In the screenshot below, you can see that “spiral” was sent to the server as a UTF-8 text message and echoed back:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot of Fiddler showing a WebSocket response." src="http://ieblog.members.winisp.net/images/20120319-waiwcp-image8.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p style="margin-bottom:0;"&gt;If you want to learn more about WebSockets, you may watch these sessions from the Microsoft //Build/ conference from September 2011:&lt;/p&gt;
&lt;ul style="margin-top:0;"&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/PLAT-373C"&gt;Building real-time Web apps with HTML5 WebSockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/events/BUILD/BUILD2011/SAC-807T"&gt;Building real-time Web apps with WebSockets using IIS, ASP.NET and WCF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/PLAT-580T"&gt;Building Windows runtime sockets apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom:0;"&gt;If you’re curious about using Microsoft technologies to create a WebSocket service, these posts are good introductions:&lt;/p&gt;
&lt;ul style="margin-top:0;"&gt;
&lt;li&gt;&lt;a href="http://www.paulbatum.com/2011/09/getting-started-with-websockets-in.html"&gt;Getting started with WebSockets in the Windows 8 developer preview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.paulbatum.com/2011/10/getting-to-know-systemnetwebsockets.html"&gt;Getting to know System.Net.WebSockets: A simple ASP.NET echo server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I encourage you to start developing with WebSockets today and share your feedback with us.&lt;/p&gt;
&lt;p&gt;—Brian Raymor, Senior Program Manager, Windows Networking&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10285146" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/W3C/">W3C</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Media Capture Prototype: Improved Support for Real World Web Apps</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/16/media-capture-prototype-improved-support-for-real-world-web-apps.aspx</link><pubDate>Fri, 16 Mar 2012 22:47:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10284449</guid><dc:creator>ieblog</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10284449</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/16/media-capture-prototype-improved-support-for-real-world-web-apps.aspx#comments</comments><description>&lt;p&gt;Today we &lt;a href="http://html5labs.interoperabilitybridges.com/prototypes/media-capture-api-(2nd-updated)/media-capture-api-(2nd-update)/info"&gt;
    updated on HTML5 Labs&lt;/a&gt; the previously released &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/09/media-capture-api-helping-web-developers-directly-import-image-video-and-sound-data-into-web-apps.aspx"&gt;
        Media Capture prototype&lt;/a&gt; to better align it to the latest &lt;a href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html"&gt;
            W3C editor draft&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.w3.org/TR/html-media-capture/"&gt;HTML Media Capture&lt;/a&gt;
    working draft continues to evolve alongside &lt;a href="http://lists.w3.org/Archives/Public/public-webrtc/2012Feb/thread.html"&gt;
        related discussions&lt;/a&gt; in the &lt;a href="http://dev.w3.org/2011/webrtc/editor/webrtc.html"&gt;
            Web RTC&lt;/a&gt; workgroup, and we have &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/09/media-capture-api-helping-web-developers-directly-import-image-video-and-sound-data-into-web-apps.aspx"&gt;
                blogged previously&lt;/a&gt; about why this feature is important and how our
    &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/09/media-capture-api-helping-web-developers-directly-import-image-video-and-sound-data-into-web-apps.aspx"&gt;
        Media Capture prototype&lt;/a&gt; implemented it in the past. &lt;/p&gt;
&lt;p&gt;Because the API surface for this feature is far from final, we are supporting a simple
    capture syntax with this update, which is based on &lt;a href="http://dev.w3.org/2011/webrtc/editor/webrtc.html"&gt;
        the most current proposal&lt;/a&gt;. We expect the capture syntax to change as the
    requirements for media capture are clarified in the task force.&lt;/p&gt;
&lt;h2&gt;Latest Updates&lt;/h2&gt;
&lt;p&gt;In this &lt;a href="http://html5labs.interoperabilitybridges.com/prototypes/media-capture-api-(2nd-updated)/media-capture-api-(2nd-update)/info"&gt;
    update&lt;/a&gt;, we are specifically adding support for a version of the &lt;code&gt;getUserMedia&lt;/code&gt;
    method (function names are ms-prefixed for prototyping purposes), the &lt;code&gt;MediaStream&lt;/code&gt;
    interface, and its associated events and callbacks. &lt;code&gt;getUserMedia&lt;/code&gt; allows
    Web developers to suggest what specific capture devices are desired. This then allows
    end users to authorize the browser to access the device they selected for the duration
    of the capture session.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; onLoad() {&lt;/p&gt;
        &lt;p style="margin: 0 0 0 6em;"&gt;navigator.msGetUserMedia(options, cameraStarted);&lt;/p&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
        &lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;function&lt;/span&gt; cameraStarted(mediaStream)
            {&lt;/p&gt;
        &lt;p style="margin: 0 0 0 6em;"&gt;msMediaStream = mediaStream;&lt;/p&gt;
        &lt;p style="margin: 0 0 0 6em;"&gt;getReady();&lt;/p&gt;
        &lt;p style="margin: 0 0 0 6em;"&gt;document.getElementById(&lt;span style="color: Maroon;"&gt;&amp;quot;previewWindow&amp;quot;&lt;/span&gt;).style.display
            = &lt;span style="color: Maroon;"&gt;&amp;quot;block&amp;quot;&lt;/span&gt;;&lt;/p&gt;
        &lt;p style="margin: 0 0 0 6em;"&gt;document[&lt;span style="color: Maroon;"&gt;&amp;quot;imgPreview&amp;quot;&lt;/span&gt;].src
            = URL.createObjectURL(mediaStream);&lt;/p&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;p&gt;The advantage of this is two-fold: it protects user security and privacy and lets
    them pick the optimal device for the capture task from the many options available
    to them on a modern PC.&lt;/p&gt;
&lt;p&gt;Looking back at our earlier proposals, we believe those scenarios are still important
    and relevant to this update: last March we released a &lt;a href="http://html5labs.interoperabilitybridges.com/prototypes/media-capture-api/media-capture-api/info"&gt;
        prototype implementation&lt;/a&gt; of the audio portion of a working draft of the
    W3C &lt;a href="http://www.w3.org/TR/media-capture-api/"&gt;Media Capture API&lt;/a&gt; on &lt;a
        href="http://html5labs.interoperabilitybridges.com/"&gt;HTML5 Labs&lt;/a&gt;. This prototype
    publicized some proposed API enhancements described in &lt;a href="http://lists.w3.org/Archives/Public/www-archive/2011Mar/att-0001/microsoft-api-draft-final.html#capture_api_extensions"&gt;
        section 6.1 of Microsoft’s HTML Speech XG Speech API Proposal&lt;/a&gt;. We then &lt;a href="http://html5labs.interoperabilitybridges.com/prototypes/media-capture-api-(updated)/media-capture-api-(updated)/info"&gt;
            updated the prototype&lt;/a&gt; to include the image and video capture features
    described in the proposal to support scenarios we’ve heard are important for Web
    developers, and incorporated your feedback on audio.&lt;/p&gt;
&lt;p&gt;This past November, we took our experience with the development of this prototype
    and interest in media capture for the browser to the W3C's technical plenary meeting
    (TPAC). &lt;a href="http://lists.w3.org/Archives/Public/public-device-apis/2011Nov/att-0177/minutes-2011-11-03.html#item05"&gt;
        Travis Leithead shared some of our feedback&lt;/a&gt; with the &lt;a href="http://www.w3.org/2009/dap/"&gt;
            Device APIs (DAP) Working Group&lt;/a&gt; and we continued existing discussions
    within the &lt;a href="http://www.w3.org/2005/Incubator/htmlspeech/"&gt;HTML Speech Incubator
        Group&lt;/a&gt;. One result of our engagement was &lt;a href="http://lists.w3.org/Archives/Public/public-device-apis/2011Nov/0234.html"&gt;
            the formation of a media capture joint task force&lt;/a&gt; in order to bring
    the best of local media capture and real-time communication scenarios together.
    We are &lt;a href="http://dvcs.w3.org/hg/dap/raw-file/tip/media-stream-capture/scenarios.html"&gt;
        actively participating&lt;/a&gt; in the task force and support the &lt;a href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html"&gt;
            getUserMedia approach&lt;/a&gt; to capture. &lt;/p&gt;
&lt;p&gt;We then released an &lt;a href="http://html5labs.interoperabilitybridges.com/prototypes/media-capture-api-(updated)/media-capture-api-(updated)/info"&gt;
    updated prototype&lt;/a&gt; in December that gives Web developers early access to photo,
    video and audio media capture APIs in the browser. We anticipate evolving the prototype
    to share implementation feedback and experience with the new media capture task
    force. The end goal remains to create the best possible standard for the benefit
    of the whole Web community.&lt;/p&gt;
&lt;p&gt;Then, as discussed earlier, today we have updated the previously released &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/09/media-capture-api-helping-web-developers-directly-import-image-video-and-sound-data-into-web-apps.aspx"&gt;
    Media Capture prototype&lt;/a&gt; to better align it to the latest &lt;a href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html"&gt;
        W3C editor draft&lt;/a&gt;, which supports a simple capture syntax that is based on
    &lt;a href="http://dev.w3.org/2011/webrtc/editor/webrtc.html"&gt;the most current proposal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Microsoft remains actively engaged in the &lt;a href="http://lists.w3.org/Archives/Public/public-device-apis/2011Nov/0173.html"&gt;
    Media Capture task force&lt;/a&gt; and continues to advocate for the creation of the highest
    quality API to support these scenarios.&lt;/p&gt;
&lt;h2&gt;We Welcome Your Feedback&lt;/h2&gt;
&lt;p&gt;As always, we look forward to hearing from you, especially your questions and comments
    on how we can make this feature as good as possible for both the Developer community
    and end users. Please contact us either in the comment section on this blog or &lt;a
        href="http://www.interoperabilitybridges.com/contactus"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;—Adalberto Foresti, Senior Program Manager, Interoperability Strategy Team&lt;br /&gt;
    &lt;span style="visibility: hidden;"&gt;—&lt;/span&gt;Travis Leithead, Program Manager, Internet
    Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10284449" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/W3C/">W3C</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/HTML5/">HTML5</category></item><item><title>Spring into St. Patrick’s Day with HTML5</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/16/spring-into-st-patrick-s-day-with-html5.aspx</link><pubDate>Fri, 16 Mar 2012 14:36:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10284247</guid><dc:creator>ieblog</dc:creator><slash:comments>23</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10284247</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/16/spring-into-st-patrick-s-day-with-html5.aspx#comments</comments><description>&lt;script src="http://ie.microsoft.com/testdrive/IEBlog/Common/mp4VideoFailUseEmbed.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;p&gt;&lt;img alt="Shamrock art" style="float:right;margin-left:0.5em;margin-bottom:0.5em;" src="http://ieblog.members.winisp.net/images/20120316-shamrock.png" /&gt;Another holiday brings us another opportunity to celebrate it with you. We’re pleased to mark the transition into spring as well as St. Patrick’s Day with &lt;a href="http://ie.microsoft.com/testdrive/performance/irishspring"&gt;Irish Spring&lt;/a&gt;, a new hardware-accelerated HTML5 experience that shows the benefits of Internet Explorer 10 on &lt;a href="http://preview.windows.com/"&gt;Windows 8 Consumer Preview&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://ie.microsoft.com/testdrive/performance/irishspring"&gt;Irish Spring&lt;/a&gt; incorporates HTML5 canvas and CSS gradients, opacity, transforms, and animation along with HTML5 audio. With the Windows Consumer Preview and &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"&gt;IE10’s support for multi-touch&lt;/a&gt; you can propel the clovers and leaves around in a strangely satisfying fashion. Try it with multiple fingers on your touch device. Alternatively, you can use your mouse to move the clovers around the screen.&lt;/p&gt;
&lt;p&gt;If you aren’t using Internet Explorer 10 and think your browser can still handle the heat, give it a shot. But don’t be surprised if the lack of multi-touch and full hardware acceleration leaves you wanting to install the Windows 8 Consumer Preview.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;video style="width: 640px; height: 360px; border: 1px solid #999; outline: 0;" controls="controls"
        preload="metadata" onerror="mp4VideoFailUseEmbed(this)" onplay="this.blur();"&gt;
        &lt;source src="http://ie.microsoft.com/testdrive/ieblog/2012/mar/irish_spring_final.mp4" type="video/mp4"&gt;
        &lt;/source&gt;
        &lt;embed style="width: 640px; height: 360px; border: 1px solid #999;" src="http://ie.microsoft.com/testdrive/IEBlog/Common/player.swf"
            type="application/x-shockwave-flash" wmode="opaque" allowscriptaccess="never"
            allowfullscreen="false" flashvars="file=http://ie.microsoft.com/testdrive/ieblog/2012/mar/irish_spring_final.mp4&amp;autostart=false&amp;controlbar=over&amp;controlbar.idlehide=true&amp;bufferlength=0"&gt;&lt;/embed&gt;&lt;/video&gt;&lt;br/&gt;
This video shows IE10's support for multi-touch and hardware acceleration in action with &lt;a href="http://ie.microsoft.com/testdrive/performance/irishspring"&gt;Irish Spring&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;Put a little spring in your friends’ step by clicking the share controls at the top of the demo.&lt;/p&gt;
&lt;p&gt;From the entire IE team, we wish you a happy, safe, and lucky St. Patrick’s Day!&lt;/p&gt;
&lt;p&gt;—Tobin Titus, Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10284247" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/HTML5/">HTML5</category></item><item><title>Enhanced Protected Mode</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/14/enhanced-protected-mode.aspx</link><pubDate>Wed, 14 Mar 2012 16:41:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10283006</guid><dc:creator>ieblog</dc:creator><slash:comments>36</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10283006</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/14/enhanced-protected-mode.aspx#comments</comments><description>&lt;p&gt;Every release of Internet Explorer includes new security enhancements to help keep you safe as you browse the Internet. The new Enhanced Protected Mode in Internet Explorer 10 helps keep your data safe even if an attacker has exploited a vulnerability in the browser or one of its add-ons. &lt;/p&gt;
&lt;p&gt;There is no single thing that can keep you secure by itself, so we pursue multiple strategies, including:&lt;/p&gt;
&lt;h3&gt;Protection from socially-engineered attacks&lt;/h3&gt;
&lt;p&gt;There are a variety of miscreants that want to steal your personal information or take over your computer by impersonating Web sites that you trust. &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/05/17/smartscreen-174-application-reputation-in-ie9.aspx"&gt;SmartScreen Filter&lt;/a&gt; provides the &lt;a href="http://www.pcworld.com/businesscenter/article/213589/ie_blows_away_rivals_in_browser_security.html"&gt;best protection available&lt;/a&gt; against malware attacks and phishing. In Windows 8, this protection was added to the Windows Shell, to help keep you safe from malware no matter how it was downloaded.&lt;/p&gt;
&lt;h3&gt;Protection from attacks designed to exploit vulnerabilities in Web sites&lt;/h3&gt;
&lt;p&gt;“Good” Web sites can have security vulnerabilities that can allow evil Web sites to steal your data or perform actions as if they were you. We protect you with the &lt;a href="http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx"&gt;XSS Filter&lt;/a&gt;, which automatically prevents certain types of attacks, and make it easier for Web sites to secure themselves with &lt;a href="http://blogs.msdn.com/b/ie/archive/2010/06/14/rely-on-browser-security-guarantees.aspx"&gt;Declarative Security&lt;/a&gt; features, like IE10’s new support for the &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/14/defense-in-depth-locking-down-mash-ups-with-html5-sandbox.aspx"&gt;HTML5 Sandbox&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Protection against attacks designed to exploit the browser or operating system&lt;/h3&gt;
&lt;p&gt;Automatic updating ensures that you have the latest updates installed. This protects you against security issues that have been fixed. IE9 added &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/03/07/internet-explorer-9-security-part-1-enhanced-memory-protections.aspx"&gt;memory protection&lt;/a&gt; features to make it harder to exploit certain types of vulnerabilities and we &lt;a href="http://blogs.msdn.com/b/ie/archive/2012/03/12/enhanced-memory-protections-in-ie10.aspx"&gt;enhanced these features in IE10&lt;/a&gt;. We also added a new layer of protection in IE10 called Enhanced Protected Mode.&lt;/p&gt;
&lt;h3&gt;Enhanced Protected Mode&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/ie/archive/2006/02/09/528963.aspx"&gt;Protected Mode&lt;/a&gt;, which was added in IE7 for Windows Vista, is &lt;a href="http://blogs.msdn.com/b/oldnewthing/archive/2009/03/19/9488508.aspx"&gt;defense in depth&lt;/a&gt; feature that helps prevent attackers from installing software or modifying system settings if they manage to run exploit code. It is an extra layer of protection that locks down parts of your system that your browser ordinarily doesn’t need to use. For example, your browser doesn’t usually need to modify system settings or write to your Documents folder. Protected Mode is based on the &lt;a href="http://en.wikipedia.org/wiki/Principle_of_least_privilege"&gt;principle of least privilege&lt;/a&gt; -- by reducing the capabilities that Internet Explorer has, the capabilities available to exploit code are reduced as well. &lt;/p&gt;
&lt;p&gt;“Enhanced” Protected Mode takes this concept further by restricting additional capabilities. Below is a list of some of the new ways that Enhanced Protected Mode helps keep you safe:&lt;/p&gt;
&lt;div style="padding-left: 0.25in;"&gt;
&lt;h4&gt;64-bit processes&lt;/h4&gt;
&lt;p&gt;Most PCs shipped in the last few years have 64-bit CPUs, and many have a 64-bit version of Windows installed. “64-bit” is usually thought of as a way to extend the amount of memory that a program on your computer can use: because 64-bit processors use 64-bit memory addresses instead of 32-bit ones, a program can “address,” or use, more memory if it’s available. &lt;/p&gt;
&lt;p&gt;A 32-bit number is large – it’s a little more than 4 billion. A 64-bit address is much larger number – roughly 18 pentillion and change (18,446,744,073,709,551,616). Not only does a 64-bit number let you address more memory, it also makes existing memory protection features such as ASLR (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/03/07/internet-explorer-9-security-part-1-enhanced-memory-protections.aspx"&gt;Address Space Layout Randomization&lt;/a&gt;) much more effective. &lt;a href="http://en.wikipedia.org/wiki/Heap_spraying"&gt;Heap spray&lt;/a&gt; attacks, which are used by attackers to plant malicious code at predictable locations, become much more difficult because it isn’t practical to “fill up” a 64-bit address space – you’ll run out of memory and disk space long before any sizable fraction of the address space is sprayed.&lt;/p&gt;
&lt;h4&gt;Protecting your personal information&lt;/h4&gt;
&lt;p&gt;When you run a program, it has access to anything on the computer that you have access to, including your personal documents. Enhanced Protected Mode restricts Internet Explorer from locations that contain your personal information until you grant permission to it. This helps prevent exploit code from accessing your personal information without your permission.&lt;/p&gt;
&lt;p&gt;For example, consider Web-based email. If you want to attach a file from your Documents folder to the email, then Internet Explorer needs permission to access the file and upload it to your email provider. With Enhanced Protected Mode, a “&lt;a href="http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt;broker process&lt;/a&gt;” will grant Internet Explorer temporary access to the file only if you actually click on “Open” on the file upload dialog:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot showing attaching a file from your Documents folder to an email using a Web-based email application" src="http://ieblog.members.winisp.net/images/20120308-epm-image1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Notice that there are no extra prompts. Brokering is done automatically after you choose to open a file. This is like providing a single safe deposit box to Internet Explorer when requested, instead of giving access to the entire safe all of the time.&lt;/p&gt;
&lt;h4&gt;Protecting your corporate assets&lt;/h4&gt;
&lt;p&gt;Most corporate networks, or “intranets,” contain valuable information that must be protected from attackers. Enhanced Protected Mode restricts an exploit’s ability to access corporate network resources in three ways. First, Internet&lt;a href="http://blogs.msdn.com/b/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt; tab processes&lt;/a&gt;, which is where untrusted Internet pages load, do not have access to a user’s domain credentials. Second, they cannot operate as local webservers, which makes it more difficult to impersonate an Intranet site. Third, Internet tabs cannot make connections to intranet servers. &lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Default Settings and Compatibility&lt;/h3&gt;
&lt;p&gt;Metro style Internet Explorer always runs with Enhanced Protected Mode enabled – there isn’t anything that you need to configure – just browse. Because Metro style Internet Explorer offers &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/08/31/browsing-without-plug-ins.aspx"&gt;plug-in free browsing&lt;/a&gt;, the compatibility impact of this security feature is minimal. &lt;/p&gt;
&lt;p&gt;Many add-ons, such as Adobe Flash and certain toolbars are not yet compatible with Enhanced Protected Mode.  Some Web sites still require Adobe Flash in order to work, and some users enjoy the additional functionality offered by some toolbars. In Windows 8 Beta, Enhanced Protected Mode can be enabled in the desktop under Internet Options-&amp;gt;Advanced:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot of the Advanced tab of the Internet Options dialog showing the new “Enable Enhanced Protected Mode” option." src="http://ieblog.members.winisp.net/images/20120308-epm-image2.png" /&gt;&lt;/p&gt;
&lt;p&gt;After you enable Enhanced Protected Mode, incompatible add-ons will automatically be disabled. If you encounter a site that needs an add-on such as Flash in order to work, you can disable Enhanced Protected Mode just for that particular Web site. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Notification message which reads “This webpage wants to run &amp;#39;Adobe Flash Player 10.3 d162&amp;#39;. If you trust this site, you can disable Enhanced Protected Mode for this site to run the control.” The notication bar contains one button labeled “Disable”." src="http://ieblog.members.winisp.net/images/20120308-epm-image3.png" /&gt;&lt;/p&gt;
&lt;p&gt;This allows you to continue using the site, and have Enhanced Protected Mode enabled on the rest of the Internet. Keep in mind that you should only do this if you know and trust the Web site. &lt;/p&gt;
&lt;p&gt;Of course, if you prefer to browse without add-ons, you can always turn on &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/02/28/activex-filtering-for-consumers.aspx"&gt;ActiveX Filtering&lt;/a&gt;, which will prevent you from seeing this prompt. &lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;Defense-in-depth is an area of continual investment for the Windows team. It’s a widely-applied principle in the real world as well. Safety deposit boxes have locks on them. But they are also kept inside of a locked room, inside of a bank, which is locked and is armed with an advanced security system. Enhanced Protected Mode is another layer of protection that helps protect your data from malicious attackers. &lt;/p&gt;
&lt;p&gt;—Andy Zeigler, Senior Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10283006" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Security/">Security</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Enhanced Memory Protections in IE10</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/12/enhanced-memory-protections-in-ie10.aspx</link><pubDate>Tue, 13 Mar 2012 00:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281710</guid><dc:creator>ieblog</dc:creator><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10281710</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/12/enhanced-memory-protections-in-ie10.aspx#comments</comments><description>&lt;p&gt;Internet Explorer 10 introduces significant improvements in memory protections to help make vulnerabilities harder to exploit, helping to keep users safe on the sometimes-hostile Web. These improvements will increase the difficulty and development cost of exploits, making life harder for the bad guys.&lt;/p&gt;
&lt;p&gt;While socially-engineered malware is the primary way that bad guys get their code onto victims&amp;rsquo; computers, that is largely because browser vulnerabilities have become less common and harder to exploit over the last few years. However, as more and more users upgrade to IE9 and benefit from the protection provided by &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/05/17/smartscreen-174-application-reputation-in-ie9.aspx"&gt;SmartScreen Filter&lt;/a&gt;, bad guys have a renewed interest in attacking the browser and its add-ons directly.&lt;/p&gt;
&lt;p&gt;In today&amp;rsquo;s post, I explain the threat environment, survey the existing protections available in IE9, and explain how IE10&amp;rsquo;s new memory protections provide even more security.&lt;/p&gt;
&lt;h2&gt;Attacking Web Browsers&lt;/h2&gt;
&lt;p&gt;The goal of an attacker exploiting a memory-related vulnerability is to cause the browser&amp;rsquo;s path of code execution to deviate into code of the bad guy&amp;rsquo;s choosing. To achieve this, the attacker needs two things to be successful. They need to have code available on the victims&amp;rsquo; machine that they wish to run. The techniques used to obtain such code can be grouped into two classes. An attacker can place their own malicious code into memory using techniques like heap spraying. Or an attacker can select code to execute that is already present in memory using a technique called Return Oriented Programming.&lt;/p&gt;
&lt;p&gt;The attacker also needs to be able to exploit a vulnerability that allows the flow of code execution to be altered from design, such as a buffer overflow vulnerability. Then they can change the code path to &amp;ldquo;jump to&amp;rdquo; the address of the code they want executed.&lt;/p&gt;
&lt;p&gt;In a typical buffer overflow attack, a carefully crafted data set is placed on the thread&amp;rsquo;s stack, overflowing its assigned buffer and overwriting other data structures. Attackers attempt to overwrite structures like exception handler records, or the return address of the function, which would allow them to change the flow of code to a location in memory of their choosing.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram illustrating that when the amount of data written to a local buffer exceeds its allocation, critical portions of the stack can be overwritten and could cause a crash. By submitting carefully crafted data, an attacker can overwrite the return address, changing the flow of code execution to an arbitrary memory location." src="http://ieblog.members.winisp.net/images/20120312-empii-image1-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Other types of attacks include use-after-free vulnerabilities, in which the application is tricked into accessing a released object whose memory has been reused for some other purpose.&lt;/p&gt;
&lt;h2&gt;Defending the Browser&lt;/h2&gt;
&lt;p&gt;Memory protection technologies provide a front line of defense to block attackers from achieving their goals. These technologies exist to make exploiting vulnerabilities more difficult, less reliable, and in some cases impossible. Memory protections aim to safely terminate a browser process under attack &lt;i&gt;before&lt;/i&gt; a vulnerability can be successfully exploited to run the attacker&amp;rsquo;s code. In many cases, protections allow vendors time to produce and distribute a fix before a vulnerability can be exploited to cause damage.&lt;/p&gt;
&lt;p&gt;The Memory Mitigation Technologies employed by Internet Explorer have evolved over time to help defend against new attack techniques as they are developed and popularized. Many defenses, like the /GS compiler flag, have been used by previous versions of Internet Explorer but are updated and enhanced over time. Some defenses, like ForceASLR (described shortly) are new to IE10 and rely on new operating system features.&lt;/p&gt;
&lt;h3&gt;Compile time mitigations&lt;/h3&gt;
&lt;p&gt;Compiler mitigations are available to software developers and should be applied as part of a development best practice. The Internet Explorer team includes these mitigations during the development Internet Explorer as a requirement of our Security Development Lifecycle. We encourage software developers to adopt their own SDL process that &lt;a href="http://msdn.microsoft.com/en-us/library/bb430720.aspx"&gt;include implementation of these compile time mitigations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;/GS flag&lt;/b&gt; was first introduced in Visual Studio .NET 2002 and has been used by all supported IE versions. It is a compiler technology which adds a Buffer Overrun Detection capability to an application&amp;rsquo;s stack. Security secrets known as &amp;ldquo;canaries&amp;rdquo; are added to application&amp;rsquo;s stack boundaries at runtime. For example, a canary placed between a stack buffer and a return address, will be overwritten by a buffer overflow attack targeting the return address. This provides a means for the process to detect that an overflow has occurred. An exception will be raised and the process can be safely terminated before the attacker&amp;rsquo;s code is run.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram showing how a security secret is placed between local variables and the return address. Before the function returns, teh value of the secret is compared with the original. If the comparison fails, an exception is raised and the process can be safely terminated." src="http://ieblog.members.winisp.net/images/20120312-empii-image2-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;This basic protection concept has been improved in each new version of Visual Studio. The latest version of Enhanced /GS, used by Internet Explorer 9+, includes greatly improved heuristics to protect more functions, including Non-Pointer arrays and pure data structures. In addition, improved optimization has eliminated unnecessary checks, decreasing the performance cost of the defense.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;/SAFESEH flag&lt;/b&gt; is a linker option that provides a mechanism for an application&amp;rsquo;s registered exception handlers to be stored in a lookup table in a secure memory location. In the event of an exception, the exception handler addresses on the application&amp;rsquo;s stack are validated against the lookup table. If the values do not match, the process will be terminated.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram showing that exception registration addresses are compared with the values stored in lookup. If the values don't match, an exception is raised and the process is terminated." src="http://ieblog.members.winisp.net/images/20120312-empii-image3-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;One problem with the /SAFESEH flag is that it requires all DLL modules to opt-in to the protection to reliably protect the process. If any module does not opt-in, protection is less effective. While the SDL requires that all of Microsoft&amp;rsquo;s code be compiled with SAFESEH, third-party add-ons might not be compiled with the flag.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;/DYNAMICBASE flag&lt;/b&gt; is a linker option that opts an application into an operating system mitigation known as &lt;b&gt;Address Space Layout Randomization (ASLR)&lt;/b&gt;, discussed in more detail later in this post.&lt;/p&gt;
&lt;p&gt;Similarly to the /SAFESEH limitation, a problem with the /DYNAMICBASE flag is that any DLL module that doesn&amp;rsquo;t opt-in to this protection reduces the value of ASLR as an exploit mitigation. Any module at a predictable location can be targeted by an attacker, and an exploit may only require one such predictable target. Many recent exploits target browser add-ons that don&amp;rsquo;t opt-in to the protection of ASLR. For instance, an &lt;a href="http://www.adobe.com/support/security/advisories/apsa10-02.html"&gt;Adobe Reader and Acrobat 0-day exploit&lt;/a&gt; in 2010 relied on the predictable location of functions within a module named icucnv36.dll that failed to opt-in to ASLR.&lt;/p&gt;
&lt;h3&gt;Run time mitigations&lt;/h3&gt;
&lt;p&gt;Runtime mitigations allow the operating system to help participate in keeping the process secure.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;DEP/NX &lt;/b&gt;is an operating system mitigation that relies upon key security features (Data Execution Prevention or No eXecute) of modern CPUs. This mitigation enables memory pages to be marked as non-executable (Data); the processor will refuse to run code on a memory page so marked.&lt;/p&gt;
&lt;p&gt;In the second stage of a memory exploit, an attacker may try to execute their own code which they have added to a data page in memory. In scenarios where the data page has been marked as non-executable, the attacker&amp;rsquo;s code will fail to run and the process will be safely terminated.&lt;/p&gt;
&lt;p&gt;DEP/NX support was first enabled by default in IE8, and remains enabled in IE10.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;SEHOP &lt;/b&gt;is a runtime mitigation that provides an exception-handler tamper-protection mechanism much like the /SAFESEH compiler flag. This protection works by inserting a symbolic exception record as the tail record in the thread&amp;rsquo;s exception handler list. In the event of an exception, the exception handler list is walked to ensure that the symbolic record can be reached. If it cannot be reached, this indicates that the exception handler chain is corrupted and the process will be safely terminated. Unlike SafeSEH, SEHOP does not require each individual module to opt-in, and thus it provides protection even if add-ons were not compiled with the most secure flags.&lt;/p&gt;
&lt;p&gt;SEHOP was &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2009/06/18/enhanced-ie-security-with-sehop.aspx"&gt;first enabled in IE9&lt;/a&gt; and remains enabled in IE10.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Address Space Layout Randomization&lt;/b&gt; was first introduced in Windows Vista and has been greatly improved in Windows 8. ASLR assigns applications a random base memory address when they are initially loaded into memory. In addition, other memory structures such as the Process Environment Blocks (PEB), Thread Environment Blocks (TEB), Stacks and Heaps are also assigned to random locations in memory.&lt;/p&gt;
&lt;p&gt;Randomizing the location of objects and functions in memory helps prevent an attacker from discovering where they are, which helps prevent a technique called Return Oriented Programming. This randomization can be thought of as securing the attacker&amp;rsquo;s payload with a combination lock. If an attacker doesn&amp;rsquo;t have the combination, they only get one guess. Guessing wrong means the attack will fail and the process will safely be terminated.&lt;/p&gt;
&lt;p&gt;The following illustration depicts how core system components are loaded in random memory addresses on system startup.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Diagram showing how the physical memory location of various system DLLs changes between a first and second boot." src="http://ieblog.members.winisp.net/images/20120312-empii-image4-1.png" /&gt;&lt;/p&gt;
&lt;p&gt;ASLR in Windows 8 has seen a number of improvements, all of which are utilized by Internet Explorer 10.&lt;/p&gt;
&lt;p&gt;All &lt;b&gt;Bottom-Up&lt;/b&gt; and &lt;b&gt;Top-Down&lt;/b&gt; allocations are now randomized using 8 bits of entropy. This improvement significantly reduces predictable memory regions including &lt;a href="http://msdn.microsoft.com/en-us/library/aa366887(VS.85).aspx"&gt;VirtualAlloc&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/aa366761(VS.85).aspx"&gt;MapViewOfFile&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;High Entropy Address Space Layout Randomization (HEASLR)&lt;/b&gt; takes advantage of the increase in 64bit address space and assigns more bits to entropy. This has the effect of drastically increasing the number of potential addresses that may be assigned to a 64bit process. All 64bit processes can opt-in to the increased entropy made available by HEASLR. Processes can opt-in either at link time (/HIGHENTROPYVA) or at load time via a new Image File Execution Option.&lt;/p&gt;
&lt;p&gt;By default, the Metro style browser runs in 64bit mode on 64bit computers, providing a much larger address space and thus more random memory layout.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ForceASLR&lt;/b&gt; is arguably the most important change to &lt;b&gt;ASLR &lt;/b&gt;in Windows 8. ForceASLR is a new loader option used by Internet Explorer 10 to instruct the operating system to randomize the location of &lt;i&gt;all&lt;/i&gt; modules loaded by the browser, even if a given module was not compiled with the /DYNAMICBASE flag. The ForceASLR protection was added to the Windows 8 kernel, and the feature is now available as an update to Windows 7 that will be installed when Internet Explorer 10 is installed on that platform.&lt;/p&gt;
&lt;p&gt;To help ensure compatibility with this feature, and to provide memory-randomization protection to older Internet Explorer versions that don&amp;rsquo;t support ForceASLR, we continue to recommend that add-on developers make use of the /DYNAMICBASE flag.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;I hope this brief overview of the memory protections present in Windows 8 and Internet Explorer 10 has proven valuable. Under the covers, we&amp;rsquo;ve made many other tweaks for enhanced security, but many of them are so esoteric that we don&amp;rsquo;t even have names for them. We do have a few more security-related announcements coming, so stay tuned for updates as we continue our mission to deliver a secure Web browsing platform.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Forbes Higman, Security Program Manager, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281710" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Security/">Security</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Web Platform Features in Windows Consumer Preview</title><link>http://blogs.msdn.com/b/ie/archive/2012/03/02/web-platform-features-in-windows-consumer-preview.aspx</link><pubDate>Fri, 02 Mar 2012 19:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10276646</guid><dc:creator>ieblog</dc:creator><slash:comments>53</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10276646</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/03/02/web-platform-features-in-windows-consumer-preview.aspx#comments</comments><description>&lt;p&gt;Internet Explorer 10 in the &lt;a href="http://preview.windows.com"&gt;Windows Consumer Preview&lt;/a&gt; introduces a number of new or updated Web platform features when compared to the &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/13/ie10pp3.aspx"&gt;IE10 in the Windows Developer Preview&lt;/a&gt; released September 13, 2011. Some of these shipped in the &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/11/29/html5-for-applications-the-fourth-ie10-platform-preview.aspx"&gt;fourth IE10 platform preview&lt;/a&gt; released November 29, 2011, and have been blogged about since; some are new in the Consumer Preview.&lt;/p&gt;
&lt;h3&gt;New or Updated Web Platform Features&lt;/h3&gt;
&lt;p style="margin-bottom: 0;"&gt;The following Web platform capabilities in the Consumer Preview were not in the Developer Preview:&lt;/p&gt;
&lt;ul style="margin-top: 0;"&gt;
&lt;li&gt;Cross-Origin Resource Sharing (CORS) for XMLHttpRequest (&lt;a href="http://www.w3.org/TR/cors/"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673569(v=vs.85).aspx#cors_xhr"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS &lt;code&gt;-ms-user-select&lt;/code&gt; property (&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/11/controlling-selection-with-css-user-select.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh708742(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 &lt;code&gt;font-feature-settings&lt;/code&gt; property to access advanced OpenType&amp;reg; features (&lt;a href="http://www.w3.org/TR/css3-fonts/#font-rend-desc"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/09/css-corner-using-the-whole-font.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh708741(v=vs.85).aspx#typographic_features"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Document setting to enable floating point values in CSS-OM (&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673543(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 BlobBuilder API and new APIs to save or open files (&lt;a href="http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/27/creating-files-through-blobbuilder.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673542(v=vs.85).aspx#blobbuilder"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 &lt;code&gt;track&lt;/code&gt; element for HTML5 video captions (&lt;a href="http://dev.w3.org/html5/spec/video.html#the-track-element"&gt;spec&lt;/a&gt;&amp;nbsp;/ &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/10/12/html5-video-captioning.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673566(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Interoperable HTML5 Quirks mode (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/14/interoperable-html5-quirks-mode-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/library/ie/hh673550.aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;JavaScript Typed Arrays (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/01/working-with-binary-data-using-typed-arrays.aspx"&gt;post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Meta tag to alert user that site requires ActiveX add-ons available only in desktop IE10 (&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/31/web-sites-and-a-plug-in-free-web.aspx"&gt;post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Removal of legacy graphics features from IE10 standards mode (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/07/moving-to-standards-based-web-graphics-in-ie10.aspx"&gt;post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Changes to support latest HTML5 WebSocket API (&lt;a href="http://dev.w3.org/html5/websockets/"&gt;spec&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Web Worker thread pooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0;"&gt;Across the board, we&amp;rsquo;ve improved performance and addressed feedback on the platform features that were available in the Windows Developer Preview but not IE9:&lt;/p&gt;
&lt;ul style="margin-top: 0;"&gt;
&lt;li&gt;CSS-OM media query list listeners (&lt;a href="http://www.w3.org/TR/cssom-view/#the-mediaquerylist-interface"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673551(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 3D transforms (&lt;a href="http://blogs.msdn.com/b/ie/archive/2012/02/02/css3-3d-transforms-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673529(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 gradients (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/05/04/css3-gradients-in-ie10-platform-preview-1.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673532(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 grid, flexible box, and multi-column layout and exclusions (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673533(v=vs.85).aspx"&gt;grid&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673531(v=vs.85).aspx"&gt;flexbox&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673534(v=vs.85).aspx"&gt;multicol&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673558(v=vs.85).aspx"&gt;exclusions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 regions and hyphenation (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/10/10/building-rich-text-centric-pages-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673537(v=vs.85).aspx"&gt;regions&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673547(v=vs.85).aspx"&gt;hyphenation&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 &lt;code&gt;text-shadow &lt;/code&gt;property (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/29/css3-text-shadow-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673564(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS3 transitions and animations (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/11/21/adding-personality-with-css3-transitions-and-animations.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673535(v=vs.85).aspx"&gt;transitions&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673530(v=vs.85).aspx"&gt;animations&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 AppCache and IndexedDB (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/27/building-offline-experiences-with-html5-appcache-and-indexeddb.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673545(v=vs.85).aspx"&gt;appcache&lt;/a&gt; /&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673548(v=vs.85).aspx"&gt; indexeddb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 &lt;code&gt;async&lt;/code&gt; attribute of the &lt;code&gt;script&lt;/code&gt; element (&lt;a href="http://www.w3.org/TR/html5/scripting-1.html#the-script-element"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673524(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 drag and drop APIs (&lt;a href="http://www.w3.org/TR/html5/dnd.html"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/27/html5-drag-and-drop-in-ie10-ppb2.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673539(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 File API (&lt;a href="http://www.w3.org/TR/FileAPI/"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/library/ie/hh673542.aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 forms and validation (&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673544(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 History API (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/10/31/html5-history-in-ie10.aspx"&gt;post&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 parsing algorithm (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/06/html5-parsing-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673554(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 sandbox (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/14/defense-in-depth-locking-down-mash-ups-with-html5-sandbox.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673561(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 Web Workers (&lt;a href="http://www.w3.org/TR/workers/"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/01/web-workers-in-ie10-background-javascript-makes-web-apps-faster.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/07/12/debugging-web-workers-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673568(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTML5 WebSocket API (&lt;a href="http://www.w3.org/TR/websockets/"&gt;spec&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/15/site-ready-websockets.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673567(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pointer events and multi-touch input (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/10/19/handling-multi-touch-and-mouse-input-in-all-browsers.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;SVG filter effects (&lt;a href="http://blogs.msdn.com/b/ie/archive/2011/10/14/svg-filter-effects-in-ie10.aspx"&gt;post&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673563(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;XMLHttpRequest enhancements (&lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673569(v=vs.85).aspx"&gt;dev&amp;nbsp;guide&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;and more. See &lt;a href="http://msdn.microsoft.com/en-us/library/ie/hh673549(v=vs.85).aspx"&gt;Windows Internet Explorer 10 Consumer Preview Guide for Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;More to Come: User Interface Improvements&lt;/h3&gt;
&lt;p&gt;Metro style Internet Explorer in the Windows Consumer Preview contains many user interface changes and additions compared to the Windows Developer Preview. You can get a taste for these in what &lt;a href="http://gizmodo.com/5889122/the-five-best-new-features-in-windows-8-consumer-preview"&gt;Gizmodo wrote about Internet Explorer 10&lt;/a&gt;. We will be blogging about these new features in the coming days both here and on &lt;a href="http://blogs.msdn.com/b/b8/"&gt;Building Windows 8&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Ted Johnson for IEBlog&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10276646" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Windows Consumer Preview: The Fifth IE10 Platform Preview</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/29/windows-consumer-preview-the-fifth-ie10-platform-preview.aspx</link><pubDate>Wed, 29 Feb 2012 15:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10274457</guid><dc:creator>ieblog</dc:creator><slash:comments>85</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10274457</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/29/windows-consumer-preview-the-fifth-ie10-platform-preview.aspx#comments</comments><description>&lt;script type="text/javascript" src="http://ie.microsoft.com/testdrive/IEBlog/Common/mp4VideoFailUseEmbed.js"&gt;&lt;/script&gt;
&lt;p&gt;With IE10 in Windows 8, we reimagined the browser. We designed and built IE10 to be the best way to experience the Web on Windows. Consumers can now enjoy more touch-friendly and beautiful, fast and fluid Web applications with the updated IE10 engine included in the &lt;a href="http://preview.windows.com/"&gt;Windows Consumer Preview&lt;/a&gt;. This fifth Platform Preview of IE10 delivers improved performance and support for more HTML5:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;video style="width: 640px; height: 360px; border: 1px solid #999; outline: 0;" onerror="mp4VideoFailUseEmbed(this)" onplay="this.blur();" preload="preload" controls="controls"&gt;&lt;source type="video/mp4" src="http://ie.microsoft.com/testdrive/ieblog/2012/feb/pp5-demo.mp4" /&gt;&lt;source type="video/webm" src="http://ie.microsoft.com/testdrive/ieblog/2012/feb/pp5-demo.webmvp8.webm" /&gt;&lt;embed style="width: 640px; height: 360px; border: 1px solid #999;" type="application/x-shockwave-flash" src="http://ie.microsoft.com/testdrive/IEBlog/Common/player.swf" wmode="opaque" allowscriptaccess="never" allowfullscreen="false" flashvars="file=http://ie.microsoft.com/testdrive/ieblog/2012/feb/pp5-demo.mp4&amp;amp;autostart=false&amp;amp;controlbar=over&amp;amp;controlbar.idlehide=true&amp;amp;bufferlength=0" /&gt;&lt;/video&gt;&lt;br /&gt;This video shows some of the touch-friendly HTML5 technologies in the fifth IE10 Platform Preview, included with the Windows Consumer Preview.&lt;br /&gt; &lt;a style="font-style: normal;" href="http://www.youtube.com/watch?v=A7y6bDZD8Gc" target="_blank"&gt;View this video on YouTube&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can read more about the improvements to the Metro style browsing experience on the &lt;a href="http://blogs.msdn.com/b/b8"&gt;Building Windows 8&lt;/a&gt; blog. The remainder of this post discusses the underlying HTML5 engine.&lt;/p&gt;
&lt;p&gt;Windows 8 includes one HTML5 browsing engine that powers both browsing experiences (the Metro style one and desktop one) as well as Metro style applications that use HTML5 and JavaScript. The common HTML5 engine provides consistently fast, safe, and powerful support for Web standards and the Web programming model, for both browser experiences as well as for Metro style applications.&lt;/p&gt;
&lt;p&gt;Consumers experience this power with rich, beautiful visual effects that take full advantage of the underlying hardware safely. Some examples that you can try at the &lt;a href="http://ie.microsoft.com/testdrive/"&gt;IE Test Drive site&lt;/a&gt; with the Consumer Preview include fast and fluid multi-touch support in Web pages and the latest database APIs, which enable you to take photos from a Web site offline. The Test Drive site demonstrates how much better the Web can be with rich visual effects, sophisticated page layouts, and the advances to the Web programming model. You can read the full list in the &lt;a href="http://msdn.microsoft.com/en-us/ie/gg192966"&gt;IE10 developer guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;A Better Web Ahead&lt;/h2&gt;
&lt;p&gt;Working closely with the developer community, we see a much better Web ahead.&lt;/p&gt;
&lt;p&gt;IE10 in the Metro style experience is plug-in free. Almost all phones and devices are already plug-in free and many sites already run &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/08/31/browsing-without-plug-ins.aspx"&gt;plug-in free&lt;/a&gt; for them. To deliver the richest experience, and one experience that scales across different devices, we continue to recommend that developers detect when plug-ins are not available and rely on native browser patterns.&lt;/p&gt;
&lt;p&gt;Similarly, we recommend that developers update their sites&amp;rsquo; older, out of date libraries (like &lt;a href="http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx"&gt;this one&lt;/a&gt;) that don&amp;rsquo;t work well with new browsers like IE10.&lt;/p&gt;
&lt;p&gt;We also recommend that developers use feature, not browser, detection. Often, the compatibility problem reports we receive have more to do with sites detecting IE and sending it different content than they send other browsers than any particular issue in IE. You can see some examples of how IE makes up for certain sites by adjusting the information it sends to particular sites (e.g. sending an iPad identification token) based on the Compatibility View (CV) list in the post script to &lt;a href="http://blogs.msdn.com/b/b8/archive/2011/09/14/metro-style-browsing-and-plug-in-free-html5.aspx"&gt;this blog&lt;/a&gt; entry.&lt;/p&gt;
&lt;p&gt;Developers can find sample feature detection code patterns in several IE blog posts, including &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/13/ie10pp3.aspx"&gt;this one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The quality and correctness of different browsers&amp;rsquo; HTML5 engines continue to vary widely. We continue to contribute to the &lt;a href="http://w3c-test.org/html/tests/reporting/report.htm"&gt;test suites&lt;/a&gt; under development at the HTML5 standards bodies to further the goal of interoperability and same markup. We&amp;rsquo;ve submitted &lt;a href="http://samples.msdn.microsoft.com/ietestcenter/"&gt;456 new tests&lt;/a&gt; to them that you can view at the IE Test Center as well. As different browsers improve their support of the same markup to produce the same results, we can all realize the promise of HTML5.&lt;/p&gt;
&lt;p&gt;You can find a full list of new functionality available to developers in the IE10 developer guide &lt;a href="http://msdn.microsoft.com/en-us/ie/gg192966"&gt;here&lt;/a&gt;. Download the &lt;a href="http://connect.microsoft.com/ie/"&gt;Windows 8 Consumer preview&lt;/a&gt; to try this update to IE10. We look forward to continued engagement with the developer community and your feedback on &lt;a href="http://connect.microsoft.com/ie"&gt;Connect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;―Dean Hachamovitch, Corporate Vice President, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10274457" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/IE+Announcements/">IE Announcements</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Protecting Consumers’ Privacy Online</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/23/protecting-consumers-privacy-online.aspx</link><pubDate>Thu, 23 Feb 2012 23:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10271929</guid><dc:creator>ieblog</dc:creator><slash:comments>23</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10271929</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/23/protecting-consumers-privacy-online.aspx#comments</comments><description>&lt;p&gt;This morning in the United States, the White House announced a new &amp;ldquo;&lt;a href="http://www.whitehouse.gov/the-press-office/2012/02/23/we-can-t-wait-obama-administration-unveils-blueprint-privacy-bill-rights"&gt;Consumer Privacy Bill of Rights&lt;/a&gt;&amp;rdquo; as part of the effort to improve consumers&amp;rsquo; online privacy. As I&amp;rsquo;ve &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/08/online-tracking-consumer-protection-and-web-standards.aspx"&gt;mentioned&lt;/a&gt; &lt;a href="http://blogs.msdn.com/b/ie/archive/2012/01/23/this-week-in-privacy.aspx"&gt;before&lt;/a&gt;, Microsoft is actively participating in the industry initiative for &lt;a href="http://www.w3.org/2011/tracking-protection/"&gt;Tracking Protection at the W3C&lt;/a&gt; to produce Web standards for online privacy.&lt;/p&gt;
&lt;p&gt;The Tracking Protection Working Group is &lt;a href="http://www.w3.org/2011/tracking-protection/charter.html"&gt;chartered&lt;/a&gt; to work on two complementary initiatives: Tracking Preference Expression (Do Not Track) and Tracking Selection Lists (TSL). The &lt;a href="http://dvcs.w3.org/hg/tracking-protection/raw-file/tip/ED-tracking-tsl.html"&gt;TSL editor&amp;rsquo;s draft&lt;/a&gt; defines a format for interchangeable lists for blocking or allowing tracking elements from Web pages. Last month, at the W3C &lt;a href="http://www.w3.org/2011/tracking-protection/agenda-2012-24-01-belgium"&gt;face-to-face meeting&lt;/a&gt;, the working group decided that a sub-group (or &amp;ldquo;task force&amp;rdquo;) of those interested in TSLs should work on the specification together.&lt;/p&gt;
&lt;p&gt;Work on &lt;a href="http://www.w3.org/TR/tracking-dnt"&gt;Do Not Track&lt;/a&gt; (DNT) is continuing and the &lt;a href="http://www.w3.org/2012/02/dnt.html.en"&gt;W3C expects this to become a standard sometime in 2012&lt;/a&gt;. In the meantime, IE&amp;rsquo;s &lt;a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie-9/features/tracking-protection"&gt;Tracking Protection&lt;/a&gt; feature is available to IE9 and IE10 users today. This is the only technology that can filter out unwanted cookies, beacons, and other tracking devices without requiring Web sites, advertisers, and publishers to change.&lt;/p&gt;
&lt;p&gt;At the &lt;a href="http://www.cpdpconferences.org/"&gt;CPDP 2012&lt;/a&gt; conference in Brussels, Simon Davies and Alexander Hanff of &lt;a href="https://www.privacyinternational.org/blog/tracking-protection-comes-age"&gt;Privacy International launched&lt;/a&gt; two new tracking protection lists designed to protect consumers from &lt;a href="http://www.privacyonline.org.uk/wa.html"&gt;Web Analytics&lt;/a&gt; and &lt;a href="http://www.privacyonline.org.uk/bt.html"&gt;Behavioural Tracking&lt;/a&gt;. These lists are available from &lt;a href="http://www.privacyonline.org.uk/"&gt;http://www.privacyonline.org.uk/&lt;/a&gt;. Check out the complete set of Tracking Protection Lists available from the &lt;a href="http://www.iegallery.com/us/trackingprotectionlists/default.aspx"&gt;IE Gallery&lt;/a&gt; (including the popular &lt;a href="https://easylist.adblockplus.org/en/"&gt;EasyPrivacy&lt;/a&gt; and &lt;a href="http://fanboy.co.nz/adblock/ie.html"&gt;Fanboy&lt;/a&gt; lists).&lt;/p&gt;
&lt;p&gt;--Adrian Bateman, Program Manager, Internet Explorer&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note: Correction in last paragraph&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10271929" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Privacy/">Privacy</category></item><item><title>Google Bypassing User Privacy Settings</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/20/google-bypassing-user-privacy-settings.aspx</link><pubDate>Mon, 20 Feb 2012 18:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269894</guid><dc:creator>ieblog</dc:creator><slash:comments>156</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10269894</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/20/google-bypassing-user-privacy-settings.aspx#comments</comments><description>&lt;p&gt;When the IE team heard that Google had bypassed user privacy settings on Safari, we asked ourselves a simple question:&amp;nbsp;is Google circumventing the privacy preferences of Internet Explorer users too? We&amp;rsquo;ve discovered the answer is yes: Google is employing similar methods to get around the default privacy protections in IE and track IE users with cookies. Below we spell out in more detail what we&amp;rsquo;ve discovered, as well as recommendations to IE users on how to protect their privacy from Google with the use of IE9's Tracking Protection feature. We&amp;rsquo;ve also contacted Google and asked them to commit to honoring P3P privacy settings for users of all browsers.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve found that Google bypasses the P3P Privacy Protection feature in IE. The result is similar to the recent reports of Google&amp;rsquo;s circumvention of privacy protections in Apple&amp;rsquo;s Safari Web browser, even though the actual bypass mechanism Google uses is different.&lt;/p&gt;
&lt;p&gt;Internet Explorer 9 has an additional privacy feature called Tracking Protection which is not susceptible to this type of bypass. Microsoft recommends that customers who want to protect themselves from Google&amp;rsquo;s bypass of P3P Privacy Protection use Internet Explorer 9 and click &lt;a href="javascript:window.external.msAddTrackingProtectionList('http://ie.microsoft.com/testdrive/browser/p3p/google.txt',%20'Block%20third-party%20Google%20site%20tracking')"&gt;here&lt;/a&gt; to add a Tracking Protection List. Customers can find additional lists and information on &lt;a href="http://ie.microsoft.com/testdrive/browser/p3p/"&gt;this page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Background: Google Bypassing Apple&amp;rsquo;s Privacy Settings&lt;/h2&gt;
&lt;p&gt;A recent front page &lt;a href="http://online.wsj.com/article/SB10001424052970204880404577225380456599176.html"&gt;Wall Street Journal&lt;/a&gt; article described how Google &amp;ldquo;bypassed Apple browser settings for guarding privacy.&amp;rdquo; The editor and CEO of &lt;a href="http://www.businessinsider.com/google-apple-tracking-explanation-2012-2"&gt;Business Insider&lt;/a&gt;, a business news and analysis site, summarized the situation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="NoSpacing"&gt;Google secretly developed a way to circumvent default privacy settings established by a&amp;hellip; competitor, Apple&amp;hellip; [and] Google then used the workaround to drop ad-tracking cookies on the Safari users, which is exactly the sort of practice that Apple was trying to prevent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Third-party cookies are a common mechanism used to track what people do online.&amp;nbsp; Safari protects its users from being tracked this way by a default user setting that blocks third-party cookies.&amp;nbsp; Here&amp;rsquo;s Business Insider&amp;rsquo;s summary:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="NoSpacing"&gt;What Safari does NOT allow, by default, is for third-party &amp;hellip; cookies on users' computers without their permission. It is these ad-tracking cookies that cause lots of Internet users to freak out that their privacy is being violated, so it's understandable that Apple decided to block them by default.&lt;/p&gt;
&lt;p class="NoSpacing"&gt;But these default settings have created a problem for Google, at least with respect to its goals for its advertising business.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Google&amp;rsquo;s approach to third-party cookies seems to have the side effect of Safari believing they are first-party cookies.&lt;/p&gt;
&lt;h2&gt;What Happens in IE&lt;/h2&gt;
&lt;p&gt;By default, IE blocks third-party cookies &lt;i&gt;unless&lt;/i&gt; the site presents a &lt;a href="http://en.wikipedia.org/wiki/P3P"&gt;P3P Compact Policy Statement &lt;/a&gt; indicating how the site will use the cookie and that the site&amp;rsquo;s use does not include tracking the user. Google&amp;rsquo;s P3P policy causes Internet Explorer to accept Google&amp;rsquo;s cookies even though the policy does not state Google&amp;rsquo;s intent.&lt;/p&gt;
&lt;p&gt;P3P, an official recommendation of the W3C Web standards body, is a Web technology that all browsers and sites can support. Sites use P3P to describe how they intend to use cookies and user information. By supporting P3P, browsers can block or allow cookies to honor user privacy preferences with respect to the site&amp;rsquo;s stated intentions.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s worth noting that users cannot easily access P3P policies. Web sites send these policies directly to Web browsers using HTTP headers. The only people who see P3P descriptions are technically skilled and use special tools, like the Cookie inspector in the &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler tool&lt;/a&gt;. For example, here is the P3P Compact Policy (CP) statement from Microsoft.com:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="font-family: Consolas, Monospace; font-size: 13px; color: black;"&gt;P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Each token (e.g. ALL, IND) has a specific meaning for a P3P-compliant Web browser. For example, &amp;lsquo;SAMo&amp;rsquo; indicates that &amp;lsquo;We [the site] share information with Legal entities following our practices,&amp;rsquo; and &amp;lsquo;TAI&amp;rsquo; indicates &amp;lsquo;Information may be used to tailor or modify content or design of the site where the information is used only for a single visit to the site and not used for any kind of future customization.&amp;rsquo; The details of privacy are complex, and the P3P standard is complex as well. You can read more about P3P &lt;a href="http://www.w3.org/TR/P3P/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Technically, Google utilizes a nuance in the P3P specification that has the effect of bypassing user preferences about cookies. The P3P specification (in an attempt to leave room for future advances in privacy policies) states that browsers should ignore any undefined policies they encounter. Google sends a P3P policy that fails to inform the browser about Google&amp;rsquo;s use of cookies and user information. Google&amp;rsquo;s P3P policy is actually a statement that it is not a P3P policy. It&amp;rsquo;s intended for humans to read even though P3P policies are designed for browsers to&amp;nbsp;&amp;ldquo;read&amp;rdquo;:&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="font-family: Consolas, Monospace; font-size: 13px; color: black;"&gt;P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&amp;amp;answer=151657 for more info."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;P3P-compliant browsers interpret Google&amp;rsquo;s policy as indicating that the cookie will not be used for any tracking purpose or any purpose at all. By sending this text, Google bypasses the cookie protection and enables its third-party cookies to be allowed rather than blocked. The P3P specification (&amp;ldquo;&lt;a href="http://www.w3.org/TR/P3P/#compact_policy_vocabulary"&gt;4.2 Compact Policy Vocabulary&lt;/a&gt;&amp;rdquo;) calls for IE&amp;rsquo;s implemented behavior when handling unknown tokens: &amp;ldquo;If an unrecognized token appears in a compact policy, the compact policy has &lt;i&gt;the same semantics&lt;/i&gt; as if that token was not present.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Similarly, it&amp;rsquo;s worth noting section &amp;ldquo;3.2 Policies&amp;rdquo; from the &lt;a href="http://www.w3.org/TR/P3P/#Policies"&gt;P3P specification&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;3.2&amp;nbsp;Policies&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;In cases where the P3P vocabulary is not precise enough to describe a Web site's practices, sites should use the vocabulary terms that most closely match their practices and provide further explanation in the &lt;/b&gt;&lt;code style="font-family: Consolas, Monospace; font-size: 11px; color: black;"&gt;CONSEQUENCE&lt;/code&gt;&lt;b&gt; field and/or their human-readable policy. However, policies MUST NOT make false or misleading statements.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;P3P is designed to support sites that convey their privacy intentions. Google&amp;rsquo;s use of P3P does not convey those intentions in a manner consistent with the technology.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Because of the issues noted above, and the ongoing development of new mechanisms to track users that do not involve cookies, our focus is on the new Tracking Protection technology.&lt;/p&gt;
&lt;h2&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;After investigating what Google sends to IE, we confirmed what we describe above. We have made a Tracking Protection List available that IE9 users can add by clicking &lt;a href="javascript:window.external.msAddTrackingProtectionList('http://ie.microsoft.com/testdrive/browser/p3p/google.txt',%20'Block%20third-party%20Google%20site%20tracking')"&gt;here&lt;/a&gt; as a protection in the event that Google continues this practice. Customers can find additional lists and information on &lt;a href="http://ie.microsoft.com/testdrive/browser/p3p/"&gt;this page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The premise of Tracking Protection in IE9 is that tracking servers never have the opportunity to use cookies or any other mechanism to track the user if the user never sends anything to a tracking server. This logic underlies why Tracking Protection blocks network requests &lt;i&gt;entirely&lt;/i&gt;. This new technology approach is currently undergoing the standardization process at the W3C.&lt;/p&gt;
&lt;p&gt;This &lt;a href="http://blogs.msdn.com/b/ieinternals/archive/2010/06/05/understanding-internet-explorer-cookie-controls.aspx"&gt;blog post&lt;/a&gt; has additional information about IE&amp;rsquo;s cookie controls, and shows how you can block all cookies from a given site (e.g. *.google.com) regardless of whether they are first- or third-party. This method of blocking cookies would not be subject to the methods Google used. We recommend that users not yet running IE9 take steps described in this post.&lt;/p&gt;
&lt;p&gt;Given this real-world behavior, we are investigating what additional changes to make to our products. The P3P specification says that browsers should ignore unknown tokens. Privacy advocates involved in the original specification have recently suggested that IE ignore the specification and block cookies with unrecognized tokens. We are actively investigating that course of action.&lt;/p&gt;
&lt;p&gt;―Dean Hachamovitch, Corporate Vice President, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269894" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Tips+and+Tricks/">Tips and Tricks</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Privacy/">Privacy</category></item><item><title>Sub-pixel Rendering and the CSS Object Model</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx</link><pubDate>Fri, 17 Feb 2012 20:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269184</guid><dc:creator>ieblog</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10269184</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx#comments</comments><description>&lt;p&gt;With Windows 8, you have an unprecedented choice of devices for browsing the Web, from large desktop screens to small slates. In order to accommodate this range of devices, the browser must be able to scale and layout the Web at many different screen sizes and dimensions. We've previously blogged about &lt;a href="http://blogs.msdn.com/b/ie/archive/2008/03/25/internet-explorer-8-and-adaptive-zoom.aspx"&gt; some&lt;/a&gt; &lt;a href="http://blogs.msdn.com/b/ie/archive/2010/11/03/sub-pixel-fonts-in-ie9.aspx"&gt; of the&lt;/a&gt; &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx"&gt; features&lt;/a&gt; in IE that support these scenarios. &lt;a href="http://ie.microsoft.com/testdrive/Performance/TextJustificationAnimated/Default.html"&gt; Sub-pixel positioning&lt;/a&gt; (of text and layout) is one of the core platform technologies which enable Web pages to look beautiful and consistent at any scale.&lt;/p&gt;
&lt;p&gt;In this post, we describe changes made in IE10 to better support sub-pixel positioning through the CSS-OM.&lt;/p&gt;
&lt;p&gt;Web developers can build beautiful layouts through a variety of platform technologies. Generally, developers use &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"&gt; CSS style sheets&lt;/a&gt; to describe the layout a Web site. In some scenarios, Web developers also depend on JavaScript code to &lt;a href="http://msdn.microsoft.com/en-us/library/ms530302(v=VS.85).aspx"&gt; measure, align, or position elements of a Web page&lt;/a&gt; with &lt;code&gt;pixel-perfect&lt;/code&gt; precision. For example, some online editors carefully position an edit box exactly over the top of existing content so that it only appears as if you are directly editing the existing content. Scenarios such as this one may use the CSS object model (CSS-OM) APIs to read and/or set element position. The CSS-OM is a set of JavaScript APIs for programmatically manipulating CSS.&lt;/p&gt;
&lt;p&gt;Measuring and aligning layout elements using the CSS-OM APIs can be problematic because of the way that those APIs round or truncate sub-pixel positioned values to whole-pixel numbers.&lt;/p&gt;
&lt;h3&gt;A Quick Note about Pixel-perfect Layouts&lt;/h3&gt;
&lt;p&gt;In general, pixel-perfect layouts on the Web tend to conflict with the goals of enabling accessible, compatible, and adaptable content, and consequently are not a best practice. The following collage illustrates some of the bugs that can occur when the Web designer attempts to create a pixel-perfect design but unexpected Web platform differences cause their designs to go awry.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Examples of pixel-perfect designs gone wrong" src="http://ieblog.members.winisp.net/images/20120217-real_world_examples.jpg" /&gt;&lt;br /&gt; Examples of pixel-perfect designs gone wrong&lt;/p&gt;
&lt;p&gt;When using the CSS-OM to dynamically generate a layout, Web developers should allow for a few pixels of potential error. Better yet, IE10 provides &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/04/14/ie10-platform-preview-and-css-features-for-adaptive-layouts.aspx"&gt; several&lt;/a&gt; &lt;a href="http://channel9.msdn.com/posts/Internet-Explorer-10-Platform-Preview-2-A-look-at-Positioned-Floats-in-IE10"&gt; new&lt;/a&gt; layout options that developers can use to better achieve many of these desired layouts without requiring pixel-perfect alignment using the CSS-OM.&lt;/p&gt;
&lt;h3&gt;An Illustration&lt;/h3&gt;
&lt;p&gt;To illustrate how the CSS-OM APIs may cause subtle positioning problems, consider a simple example. Sub-pixel positioning allows four boxes to be evenly distributed inside of the container, despite the container's size not being evenly divisible by four.&lt;/p&gt;
&lt;p&gt;Consider the following HTML markup fragment:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;content 1&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;content 2&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;content 3&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;content 4&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;with this partial CSS markup:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt; { &lt;span style="color: red;"&gt;width&lt;/span&gt;: &lt;span style="color: blue;"&gt;554px&lt;/span&gt;; &lt;span style="color: red;"&gt;border&lt;/span&gt;: &lt;span style="color: blue;"&gt;1px&lt;/span&gt; &lt;span style="color: blue;"&gt;solid&lt;/span&gt; &lt;span style="color: blue;"&gt;black&lt;/span&gt;; &lt;span style="color: red;"&gt;text-align&lt;/span&gt;: &lt;span style="color: blue;"&gt;center&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt; &lt;span style="color: maroon;"&gt;div&lt;/span&gt; { &lt;span style="color: red;"&gt;display&lt;/span&gt;: &lt;span style="color: blue;"&gt;inline-block&lt;/span&gt;; &lt;span style="color: red;"&gt;width&lt;/span&gt;: &lt;span style="color: blue;"&gt;25%&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt; &lt;span style="color: maroon;"&gt;div:nth-child(even)&lt;/span&gt; { &lt;span style="color: red;"&gt;background-color&lt;/span&gt;: &lt;span style="color: blue;"&gt;Red&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: maroon;"&gt;footer&lt;/span&gt; &lt;span style="color: maroon;"&gt;div:nth-child(odd)&lt;/span&gt; { &lt;span style="color: red;"&gt;background-color&lt;/span&gt;: &lt;span style="color: blue;"&gt;Orange&lt;/span&gt;; }&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Now, let&amp;rsquo;s add a function that runs on load and reports the widths of these items:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;onload = &lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; footerBoxes = document.querySelectorAll(&lt;span style="color: maroon;"&gt;"footer div"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; s = &lt;span style="color: maroon;"&gt;""&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; totalSize = 0;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: blue;"&gt;for&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; footerBoxes.length; i++) {&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: #006400;"&gt;// Reporting&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; offsetWidth = footerBoxes[i].offsetWidth;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;s += &lt;span style="color: maroon;"&gt;"content "&lt;/span&gt; + (i + 1) + &lt;span style="color: maroon;"&gt;" offsetWidth = "&lt;/span&gt; + offsetWidth + &lt;span style="color: maroon;"&gt;"px"&lt;/span&gt; + &lt;span style="color: maroon;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 8em;"&gt;totalSize += offsetWidth;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;s += &lt;span style="color: maroon;"&gt;"Total &amp;lt;i&amp;gt;calculated&amp;lt;/i&amp;gt; offsetWidth = "&lt;/span&gt; + totalSize + &lt;span style="color: maroon;"&gt;"px"&lt;/span&gt; + &lt;span style="color: maroon;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;s += &lt;span style="color: maroon;"&gt;"Container width = "&lt;/span&gt; + document.querySelector(&lt;span style="color: maroon;"&gt;"footer"&lt;/span&gt;).clientWidth + &lt;span style="color: maroon;"&gt;"px"&lt;/span&gt; + &lt;span style="color: maroon;"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;document.querySelector(&lt;span style="color: maroon;"&gt;"#message"&lt;/span&gt;).innerHTML = s;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The result of running this markup and code in IE9 is something like this:&lt;/p&gt;
&lt;p&gt;&lt;code style="display: block; margin: 1em 0.25in;"&gt; &lt;span style="display: block; width: 554px; border: 1px solid black; text-align: center;"&gt; &lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 1&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 2&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 3&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 4&lt;/span&gt; &lt;/span&gt; &lt;span style="display: block; width: 554px; padding-top: 0.5em;"&gt; content 1 offsetWidth = 139&lt;br /&gt;content 2 offsetWidth = 139&lt;br /&gt;content 3 offsetWidth = 139&lt;br /&gt;content 4 offsetWidth = 139&lt;br /&gt;Total &lt;i&gt;calculated&lt;/i&gt; offsetWidth = 556&lt;br /&gt;Actual container width = 554&lt;/span&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note that summing the values returned by the CSS-OM API &lt;code&gt;offsetWidth&lt;/code&gt; results in the total calculated offsetWidth differing from the actual container width by two pixels, due to rounding that occurs in the &lt;code&gt;offsetWidth&lt;/code&gt; of the individual &lt;code&gt;div&lt;/code&gt; elements.&lt;/p&gt;
&lt;p&gt;The results in other browsers show a similar discrepancy, though sometimes the total is less than the actual and sometimes greater.&lt;/p&gt;
&lt;p&gt;When the rounding/truncation leads to a sum total that overflows the container size (as illustrated), content will start to wrap or cause unwanted scroll-bars to appear. Additionally, many containers are sized according to the text and the font used to render the text, and those font metrics may be different across browsers or alternate fonts may be selected if the requested font isn't available.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;offsetWidth&lt;/code&gt; API, along with many other widely used CSS-OM properties (most dating back to IE4 in 1997), provide a convenient and fast way to extract integer pixel values for an element from a variety of different coordinate systems. All major browsers implement most of these APIs for compatibility and they are also part of the &lt;a href="http://www.w3.org/TR/cssom-view/"&gt;CSS-OM View&lt;/a&gt; module, a W3C draft standard.&lt;/p&gt;
&lt;p&gt;New browser features continue to demonstrate the shortfall of limiting CSS-OM properties to whole-value pixels. For example, features like SVG and &lt;a href="http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_2d-transforms.htm"&gt; CSS 2D&lt;/a&gt;/ &lt;a href="http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_3d-transforms.htm"&gt; 3D Transforms&lt;/a&gt; allow an element's dimensions to easily fall between pixels.&lt;/p&gt;
&lt;h3&gt;Addressing the Problem&lt;/h3&gt;
&lt;p&gt;Recognizing this limitation (in part), the W3C &lt;a href="http://www.w3.org/TR/cssom-view/"&gt; CSS-OM View&lt;/a&gt; spec describes the coordinates returned via the &lt;code&gt;getBoundingClientRect()&lt;/code&gt; API to be &lt;a href="http://en.wikipedia.org/wiki/Floating_point"&gt;&lt;code&gt;floats&lt;/code&gt;&lt;/a&gt;; in other words, in values that can represent sub-pixel precision. (&lt;code&gt;getBoundingClientRect()&lt;/code&gt; is another CSS-OM API that provides an element's bounding-box position and dimension using the same origin as the &lt;code&gt;offsetWidth&lt;/code&gt; API.)&lt;/p&gt;
&lt;p&gt;In IE10 we've updated the &lt;code&gt;getBoundingClientRect()&lt;/code&gt; API to return sub-pixel resolution by default in IE10 standards mode in order to be interoperable with other browsers and align with the W3C standard.&lt;/p&gt;
&lt;p&gt;Updating our example above to report the &lt;code&gt;width&lt;/code&gt; component of the rectangle returned by &lt;code&gt;getBoundingClientRect()&lt;/code&gt;, IE10 now reports these fractional values:&lt;/p&gt;
&lt;p&gt;&lt;code style="display: block; margin: 1em 0.25in;"&gt; &lt;span style="display: block; width: 554px; border: 1px solid black; text-align: center;"&gt; &lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 1&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 2&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 3&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 4&lt;/span&gt; &lt;/span&gt; &lt;span style="display: block; width: 554px; padding-top: 0.5em;"&gt;content 1 offsetWidth = 139, getBoundingClientRect().width = 138.5&lt;br /&gt; content 2 offsetWidth = 139, getBoundingClientRect().width = 138.5&lt;br /&gt; content 3 offsetWidth = 139, getBoundingClientRect().width = 138.5&lt;br /&gt; content 4 offsetWidth = 139, getBoundingClientRect().width = 138.5&lt;br /&gt; Total calculated offsetWidth = 556&lt;br /&gt; Total calculated getBoundingClientRect().width = 554&lt;br /&gt; Actual container width = 554&lt;/span&gt; &lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Taking Sub-pixel Values Everywhere&lt;/h3&gt;
&lt;p style="margin-bottom: 0;"&gt;In addition to &lt;code&gt;getBoundingClientRect&lt;/code&gt;, we also report sub-pixel position for mouse/pointer events in IE10 standards mode by default. It's only possible for the mouse/pointer to land &lt;code&gt;between &lt;/code&gt; pixels when the zoom factor is set to a value other than 100%. Specifically, the affected mouse/pointer APIs are:&lt;/p&gt;
&lt;ul style="margin-top: 0;"&gt;
&lt;li&gt;&lt;code&gt;MouseEvent.offsetX/Y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MouseEvent.layerX/Y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MouseEvent.clientX/Y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MouseEvent.pageX/Y&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MouseEvent.x/y&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0;"&gt;To continue our commitment to compatibility with legacy Web pages (pages which may not be prepared to handle sub-pixel values from the CSS-OM in general), IE10 continues to reports whole-value pixel units by default for the other CSS-OM properties. These APIs are:&lt;/p&gt;
&lt;ul style="margin-top: 0;"&gt;
&lt;li&gt;&lt;code&gt;Element.clientHeight&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.clientWidth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.clientLeft&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.clientTop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.scrollTop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.scrollLeft&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.scrollWidth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Element.scrollHeight&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HTMLElement.offsetWidth&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HTMLElement.offsetHeight&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HTMLElement.offsetTop&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HTMLElement.offsetLeft&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TextRange.offsetLeft&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TextRange.offsetTop&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, if necessary, IE10 now allows Web developers to enable sub-pixel positioned values from the above-listed CSS-OM properties as well. Use of this special feature requires that the site run in IE10 Standards mode and opt-in by setting the following property on the document object:&lt;/p&gt;
&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;document.msCSSOMElementFloatMetrics = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;When enabled by setting &lt;code&gt;document.msCSSOMElementFloatMetrics&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;, all CSS-OM APIs in the previous list will begin reporting their values in sub-pixel precision that will reflect exactly the calculations used internally by the layout and rendering engine. Note that JavaScript will convert 1.00 into 1 so you may not always see a decimal point in returned values.&lt;/p&gt;
&lt;p&gt;Going back to our example and setting &lt;code&gt;document.msCSSOMElementFloatMetrics&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; results in this in IE10:&lt;/p&gt;
&lt;p&gt;&lt;code style="display: block; margin: 1em 0.25in;"&gt; &lt;span style="display: block; width: 554px; border: 1px solid black; text-align: center;"&gt; &lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 1&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 2&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: orange;"&gt;content 3&lt;/span&gt;&lt;span style="display: inline-block; width: 25%; background-color: red;"&gt;content 4&lt;/span&gt; &lt;/span&gt; &lt;span style="display: block; width: 554px; padding-top: 0.5em;"&gt;content 1 offsetWidth = 138.5, getBoundingClientRect().width = 138.5&lt;br /&gt; content 2 offsetWidth = 138.5, getBoundingClientRect().width = 138.5&lt;br /&gt; content 3 offsetWidth = 138.5, getBoundingClientRect().width = 138.5&lt;br /&gt; content 4 offsetWidth = 138.5, getBoundingClientRect().width = 138.5&lt;br /&gt; Total calculated offsetWidth = 554&lt;br /&gt; Total calculated getBoundingClientRect().width = 554&lt;br /&gt; Actual container width = 554&lt;/span&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note the fractional values returned by &lt;code&gt;offsetWidth&lt;/code&gt; and that all totals now match.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;It is sometimes helpful (and, in rare cases, necessary) to be able to use the CSS-OM properties for pixel-perfect layout calculation. When using the CSS-OM, be aware of the whole-pixel-reporting characteristics of those APIs. When designing layouts either with CSS or the CSS-OM APIs, be sure to accommodate a few pixels of tolerance in order to ensure a more robust site across multiple browsers and/or devices.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Travis Leithead, Program Manager, Internet Explorer&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Editor's note: Updated to correct a few typographic errors.&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269184" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/DOM/">DOM</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>HTML5 Love is in the Air!</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/14/html5-love-is-in-the-air.aspx</link><pubDate>Tue, 14 Feb 2012 16:57:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10267765</guid><dc:creator>ieblog</dc:creator><slash:comments>36</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10267765</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/14/html5-love-is-in-the-air.aspx#comments</comments><description>&lt;p&gt;To help celebrate Valentine’s Day, we’re pleased to offer another new HTML5 experience that makes the most of your PC hardware and touch on Windows 8. Check out &lt;a href="http://ie.microsoft.com/testdrive/performance/loveisintheair/"&gt;Love is in the Air&lt;/a&gt; and feel the warm embrace of hardware accelerated HTML5. &lt;/p&gt;
&lt;p&gt;This experience brings together hardware-accelerated HTML5 canvas, SVG, CSS transforms &amp;amp; transitions, WOFF, audio, and more. On &lt;a href="http://connect.microsoft.com/ie"&gt;Windows Developer Preview&lt;/a&gt; with support for &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx"&gt;multi-touch in IE10&lt;/a&gt;, you can reach out and swipe to reveal a special message of love -or just use your mouse. If you think your browser can keep up, turn up the volume to 1000 floating hearts. Using another browser and not feeling the love? Try it with IE9 (or IE10) using the hardware acceleration built into the browser.&lt;/p&gt;

&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
&lt;a href="http://ie.microsoft.com/testdrive/performance/loveisintheair/"&gt;&lt;img style="border: none; max-width: 95%;" alt="Screen shot of Love is in the Air demo. Click the image to &amp;quot;Feel the love.&amp;quot;" src="http://ieblog.members.winisp.net/images/20120213-hliita-image1.png" /&gt;&lt;/a&gt;&lt;br /&gt;
	Click the image to feel the love&lt;/p&gt;

&lt;p&gt;Demos like this are best when shared, so we made it easy for you to experience &lt;a href="http://ie.microsoft.com/testdrive/performance/loveisintheair/#Share%20your%20love%20for%20HTML5%2C%20from%20the%20IE%20team%21"&gt;Love is in the Air&lt;/a&gt; and send a special message to your friends.&lt;/p&gt;
&lt;p&gt;From the entire IE team, we want to share the love for HTML5 and wish you a &lt;b&gt;Happy Valentine’s Day&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;—Rob Mauceri, Group Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10267765" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/HTML5/">HTML5</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Performance/">Performance</category></item><item><title>IE 9.0.5 Available via Windows Update</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/14/ie-9-0-5-available-via-windows-update.aspx</link><pubDate>Tue, 14 Feb 2012 16:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10267866</guid><dc:creator>ieblog</dc:creator><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10267866</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/14/ie-9-0-5-available-via-windows-update.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://support.microsoft.com/kb/2647516"&gt;&lt;b&gt;February 2012 Cumulative Security Update for Internet Explorer&lt;/b&gt;&lt;/a&gt; is now available via &lt;a href="http://go.microsoft.com/fwlink/?LinkID=40747"&gt;&lt;b&gt;Windows Update&lt;/b&gt;&lt;/a&gt;. This security update resolves 5 privately reported vulnerabilities in Internet Explorer. The most severe vulnerabilities could allow remote code execution if a user visits a specially crafted Web page using Internet Explorer. An attacker who successfully exploited any of these vulnerabilities could gain the same user rights as the local user.&lt;i&gt; &amp;nbsp;&lt;/i&gt;Users whose accounts are configured to have fewer user rights on the system could be less affected than users who operate with administrative user rights.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This security update is rated Critical for Internet Explorer Windows Clients, except IE6 client, where it is rated Moderate; and Moderate for Internet Explorer on Windows servers, except IE6, where it is not rated. For more information, see the &lt;a href="http://technet.microsoft.com/en-us/security/bulletin/ms12-010"&gt;&lt;b&gt;full bulletin&lt;/b&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Most customers have enabled automatic updating and do not need to take any action. We recommend that customers, who have not enabled automatic updating, enable it (Start Menu, type &amp;ldquo;Windows Update&amp;rdquo;). We recommend that administrators, enterprise installations, and end users who want to install this security update manually, apply the update immediately using update management software or by checking for updates using the Microsoft Update service.&lt;/p&gt;
&lt;p&gt;&amp;mdash;Ceri Gallacher, Program Manager, Internet Explorer&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10267866" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Security/">Security</category></item><item><title>CORS for XHR in IE10</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx</link><pubDate>Fri, 10 Feb 2012 00:08:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10266257</guid><dc:creator>ieblog</dc:creator><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10266257</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/11/29/html5-for-applications-the-fourth-ie10-platform-preview.aspx"&gt;fourth platform of IE10&lt;/a&gt; simplifies building cross-site scenarios that work consistently across browsers by supporting &lt;a href="http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html"&gt;Cross-Origin Resource Sharing (CORS)&lt;/a&gt; for &lt;a href="http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html"&gt;XMLHttpRequest (XHR)&lt;/a&gt;. CORS for XHR makes sharing data across sites simple and flexible. In the most basic scenario CORS enables creating data sources accessible from any site, and with a few small tweaks you can choose to constrain allowed sites, support data modification, and even allow authentication. Most importantly CORS keeps existing sites secure by requiring server participation. &lt;/p&gt;
&lt;h2&gt;Simple Cross-Origin XHR&lt;/h2&gt;
&lt;p&gt;Let’s look at how a cross-origin XHR request compares to a same-origin request. From script, the only difference is the URL passed to the open method. For example, say we’re working on a script that fetches a list of photo albums. &lt;/p&gt;
&lt;h3&gt;Traditional XHR&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Script running on http://photos.contoso.com&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; xhr = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; XMLHttpRequest();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onerror = _handleError;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onload = _handleLoad;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.open(&lt;span style="color: Maroon;"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, &lt;span style="color: Maroon;"&gt;&amp;quot;/albums&amp;quot;&lt;/span&gt;, &lt;span style="color: Blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.send();&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Now we want to access the list of albums from another origin. The other origin can be a completely different domain or a different host with the same base domain. Either way, just pointing at the full URL from another site is enough to get the browser to automatically send a CORS request. &lt;/p&gt;
&lt;h3&gt;CORS-Enabled XHR&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Script running on &lt;span style="background-color: yellow;"&gt;http://www.contoso.com&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; xhr = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; XMLHttpRequest();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onerror = _handleError;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onload = _handleLoad;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.open(&lt;span style="color: Maroon;"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, &lt;span style="color: Maroon;"&gt;&amp;quot;&lt;span style="background-color: yellow;"&gt;http://photos.contoso.com/albums&lt;/span&gt;&amp;quot;&lt;/span&gt;, &lt;span style="color: Blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.send();&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Sites can provide fallback for older browsers by wrapping this in feature detection. Checking for “&lt;code&gt;withCredentials&lt;/code&gt;” is the best approach since it directly relates to CORS support for XHR. &lt;/p&gt;
&lt;h3&gt;CORS-Enabled XHR with Feature Detection&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Script running on http://www.contoso.com&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; xhr = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; XMLHttpRequest();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: yellow;"&gt;&lt;span style="color: Blue;"&gt;if&lt;/span&gt; (&lt;span style="color: Maroon;"&gt;&amp;quot;withCredentials&amp;quot;&lt;/span&gt; &lt;span style="color: Blue;"&gt;in&lt;/span&gt; xhr) {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;xhr.onerror = _handleError;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;xhr.onload = _handleLoad;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;xhr.open(&lt;span style="color: Maroon;"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, &lt;span style="color: Maroon;"&gt;&amp;quot;http://photos.contoso.com/albums&amp;quot;&lt;/span&gt;, &lt;span style="color: Blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;xhr.send();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: yellow;"&gt;} &lt;span style="color: Blue;"&gt;else&lt;/span&gt; {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: rgb(0,100,0);"&gt;// Fallback behavior for browsers without CORS for XHR&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: yellow;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;At this point our client code makes a CORS request directly to "http://photos.contoso.com", but the request fails to return any data. The failure occurs because the server isn’t participating yet. Taking a quick look at the developer tools gives us an idea what went wrong. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screenshot showing the F12 tools indicating no &amp;#39;Access-Control-Allow-Origin&amp;#39; header was found." src="http://ieblog.members.winisp.net/images/20120209-cfxii-image1.png" /&gt;&lt;/p&gt;
&lt;p&gt;Here we can see the server needs to send an “&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;” header in the response. In our scenario we’re not opening up our albums for any site to access, but want to enable access solely from “&lt;code&gt;http://www.contoso.com&lt;/code&gt;”. Doing this requires allowing the server to identify where the request originated. Examining our outgoing request reveals a new header containing precisely this information, “&lt;code&gt;Origin&lt;/code&gt;”. &lt;/p&gt;
&lt;h3&gt;Simple CORS Request Headers&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;GET http://photos.contoso.com/albums HTTP/1.1&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;Origin: http://www.contoso.com&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Using this information the server can choose to limit access to any set of sites. If the server always adds an “&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;” header with a value of '*' then all sites will have access. For our scenario, we’ll have the server verify the origin and then set “&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;” to allow only “&lt;code&gt;http://www.contoso.com&lt;/code&gt;”. &lt;/p&gt;
&lt;h3&gt;Simple CORS Response Headers&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;HTTP/1.1 200 OK&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;Access-Control-Allow-Origin: http://www.contoso.com&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;With the above updates in place, our “&lt;code&gt;http://www.contoso.com&lt;/code&gt;” client can now access album lists from the server at “&lt;code&gt;http://photos.contoso.com&lt;/code&gt;”. &lt;/p&gt;
&lt;h2&gt;Cross-Origin XHR with Preflight&lt;/h2&gt;
&lt;p&gt;The “simple” CORS requests discussed so far are great for basic, read-only scenarios, like downloading a photo album. Taking the next step by modifying data across sites requires a bit more work on the server. For example, say we’re adding code in the client to create a new album. &lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;var&lt;/span&gt; xhr = &lt;span style="color: Blue;"&gt;new&lt;/span&gt; XMLHttpRequest();&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onerror = _handleError;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.onload = _handleLoad;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.open(&lt;span style="color: Maroon;"&gt;&amp;quot;&lt;span style="background-color: Yellow;"&gt;PUT&lt;/span&gt;&amp;quot;&lt;/span&gt;, &lt;span style="color: Maroon;"&gt;&amp;quot;http://photos.contoso.com/albums&amp;quot;&lt;/span&gt;, &lt;span style="color: Blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;xhr.send(JSON.stringify({ name: &lt;span style="color: Maroon;"&gt;&amp;quot;New Album&amp;quot;&lt;/span&gt; }));&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Running this as-is doesn’t work. Examining the network traffic reveals a request is sent, but not the one we expected. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screenshot of the F12 tools showing an OPTIONS preflight request." src="http://ieblog.members.winisp.net/images/20120209-cfxii-image2.png" /&gt;&lt;/p&gt;
&lt;p&gt;What the browser actually sent is known as a preflight request. Preflight requests are sent before requests that may result in data modification on the server. Such requests are identified by the presence of non-simple properties as defined in the CORS specification. These properties range from certain HTTP methods like “&lt;code&gt;PUT&lt;/code&gt;” to custom HTTP headers. Browsers send preflight requests to ask the server for permission to send the actual request. In our example the browser is verifying a “&lt;code&gt;PUT&lt;/code&gt;” request is allowed. &lt;/p&gt;
&lt;h3&gt;Preflight Request&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;OPTIONS&lt;/span&gt; http://photos.contoso.com/albums HTTP/1.1&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Origin: http://www.contoso.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;Access-Control-Request-Method: PUT&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Getting the browser to send the actual request requires some changes on the server. Once again we can take a look at the developer tools for more information. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screenshot showing the F12 tools indicating no &amp;#39;Access-Control-Allow-Methods&amp;#39; list was found." src="http://ieblog.members.winisp.net/images/20120209-cfxii-image3.png" /&gt;&lt;/p&gt;
&lt;p&gt;The first step is to make the server recognize the “&lt;code&gt;OPTIONS&lt;/code&gt;” preflight request as distinct from other requests for the same URL. After the server verifies the preflight request by ensuring “&lt;code&gt;Access-Control-Request-Method&lt;/code&gt;” is asking for “&lt;code&gt;PUT&lt;/code&gt;” from an allowed origin, it sends the appropriate approval via the “&lt;code&gt;Access-Control-Allow-Methods&lt;/code&gt;” header. &lt;/p&gt;
&lt;h3&gt;Preflight Response&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;HTTP/1.1 200 OK&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Access-Control-Allow-Origin: http://www.contoso.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;Access-Control-Allow-Methods: PUT&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Once preflight is out of the way and approved the actual request takes place. &lt;/p&gt;
&lt;h3&gt;Actual Request&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="background-color: Yellow;"&gt;PUT&lt;/span&gt; http://photos.contoso.com/albums HTTP/1.1&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Origin: http://www.contoso.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Adding the album is technically complete at this point, but our client code won’t know that unless the server responds correctly. Specifically the server must still include “&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;” in the response. &lt;/p&gt;
&lt;h3&gt;Actual Response&lt;/h3&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;HTTP/1.1 200 OK&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;Access-Control-Allow-Origin: http://www.contoso.com&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;... &lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;With that the client can add a new album cross-origin and recognize whether or not the action completed successfully. &lt;/p&gt;
&lt;h2&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;Pairing CORS with other new platform features enables interesting scenarios. One example is the &lt;a href="http://ie.microsoft.com/testdrive/HTML5/CORSUpload/"&gt;Cross-Site Upload Test Drive&lt;/a&gt; which tracks cross-origin file uploads using CORS, XHR, FileAPI, and progress events. &lt;/p&gt;
&lt;p&gt;—Tony Ross, Program Manager, Internet Explorer &lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10266257" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Security/">Security</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>High performance HTML5 content in Metro-style Apps</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/07/high-performance-html5-content-in-metro-style-apps.aspx</link><pubDate>Tue, 07 Feb 2012 22:33:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10265156</guid><dc:creator>ieblog</dc:creator><slash:comments>27</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10265156</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/07/high-performance-html5-content-in-metro-style-apps.aspx#comments</comments><description>&lt;p&gt;Metro style apps in Windows 8 have all the performance benefits of IE10 when showing Web content. In Metro style apps, Web content is always JIT compiled and hardware-accelerated. Other platforms do not provide the same level of performance in apps. For example, Cocoa apps on iOS offer significantly worse JavaScript performance (via the UIWebView control) than the same content running in Safari. These Cocoa apps do not enjoy JIT compilation, and these apps cannot show and use Web content the same way the browser on the system can:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Chart showing that Web content in an Apple iOS app is over 3 times slower than the same content in Apple Safari on the same device." src="http://ieblog.members.winisp.net/images/20120207-hphcimsa-image1.png" /&gt;&lt;br /&gt;Testing configuration: &lt;a href="http://www.webkit.org/perf/sunspider/sunspider.html"&gt;http://www.webkit.org/perf/sunspider/sunspider.html&lt;/a&gt;.&lt;br /&gt;iPad: 1st Gen, iOS 5.0.1.&lt;br /&gt;Windows 8: Developer Preview, Dell Optiplex 745, 64-bit OS.&lt;br /&gt;Kindle Fire v1.&lt;/p&gt;
&lt;h3&gt;Why is this important?&lt;/h3&gt;
&lt;p&gt;Many applications embed HTML to provide a richer and always up to date experience for consumers. For example, the developer of a restaurant guide app might want to include a live map showing the locations of the list of restaurants the user is choosing from. If you write an app on iOS, common actions like &lt;a href="http://ie.microsoft.com/testdrive/Performance/MapZooming/Default.html"&gt;panning and zooming the map&lt;/a&gt; will run twice as slow in an app compared with Safari. &lt;/p&gt;
&lt;p&gt;Anyone writing a Metro style app for Windows 8 can easily include Web content in their app. In an HTML or XAML app, just include an &amp;lt;iframe&amp;gt; element or a WebView control to get the full benefit of IE 10 performance. To see a sample HTML app that demonstrates this, check out the “Building Your First Metro Style App Using Javascript” hands-on lab at &lt;a href="http://www.buildwindows.com/Labs"&gt;http://www.buildwindows.com/Labs&lt;/a&gt;. &lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Screen shot of HTML Content from Bing Maps in an HTML Metro style app" src="http://ieblog.members.winisp.net/images/20120207-hphcimsa-image2.jpg" /&gt;&lt;br /&gt;Figure 1: HTML Content from Bing Maps in an HTML Metro Style App&lt;/p&gt;
&lt;p&gt;With Metro style apps, it’s easy to integrate many existing Web services seamlessly into your app. It’s also possible to build new services for your app that let you deliver dynamic HTML content without having to update your application. &lt;/p&gt;
&lt;p&gt;When you include Web content in your Metro style app, your app gets all the performance benefits of IE10 automatically without any additional or special work. JavaScript code continues to run fast with &lt;a href="http://blogs.msdn.com/b/ie/archive/2010/03/18/the-new-javascript-engine-in-internet-explorer-9.aspx"&gt;JIT compilation&lt;/a&gt;, and your app will automatically use GPU to accelerate HTML graphics.&lt;/p&gt;
&lt;p&gt;—Andy Zeigler, Senior Program Manager, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10265156" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Performance/">Performance</category></item><item><title>CSS3 3D Transforms in IE10</title><link>http://blogs.msdn.com/b/ie/archive/2012/02/02/css3-3d-transforms-in-ie10.aspx</link><pubDate>Thu, 02 Feb 2012 18:07:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10263341</guid><dc:creator>ieblog</dc:creator><slash:comments>29</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10263341</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/02/02/css3-3d-transforms-in-ie10.aspx#comments</comments><description>&lt;p&gt;CSS3 features make it easier to build rich and immersive Web experiences. A &lt;a
    href="http://blogs.msdn.com/b/ie/archive/2011/11/21/adding-personality-with-css3-transitions-and-animations.aspx"&gt;
    recent post&lt;/a&gt; described how Web developers add personality to their sites with
    CSS3 Transitions and Animations. &lt;a href="http://www.w3.org/TR/css3-3d-transforms/"&gt;
        CSS3 3D Transforms&lt;/a&gt; add another dimension (literally) for developers to enhance
    their sites. For example, the Windows 8 Metro style Start page uses subtle 3D transforms
    to highlight pressed tiles, as shown below.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%;" alt="Internet Explorer 10 tile shown not pressed (left) and pressed (right)"
        src="http://ieblog.members.winisp.net/images/20120202-ct-image3.png" /&gt;&lt;br /&gt;
    Internet Explorer 10 tile shown not pressed (left) and pressed (right)&lt;/p&gt;
&lt;h2&gt;Adding a 3rd Dimension to CSS Transforms&lt;/h2&gt;
&lt;p&gt;Like CSS3 2D Transforms, 3D Transforms provides functions and values for the CSS
    &lt;code&gt;transform&lt;/code&gt; and &lt;code&gt;transform-origin&lt;/code&gt; properties that apply geometric
    transformations operations to HTML elements. CSS 3D Transforms extends the transforms
    functions to enable 3D transforms. The &lt;code&gt;rotate()&lt;/code&gt;,&lt;code&gt; scale()&lt;/code&gt;,
    &lt;code&gt;translate()&lt;/code&gt;, &lt;code&gt;skew()&lt;/code&gt;, and &lt;code&gt;matrix()&lt;/code&gt; transform
    functions are expanded to encompass the 3D space with a z-coordinate parameter—or
    in the case of &lt;code&gt;matrix3d()&lt;/code&gt;, an extra 10 parameters—and by spawning additional
    transform functions, for example, &lt;code&gt;rotateZ()&lt;/code&gt; and &lt;code&gt;scaleZ()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A new &lt;code&gt;perspective&lt;/code&gt; transform function gives transformed elements depth
    by making distant points appear smaller.&lt;/p&gt;
&lt;p&gt;CSS3 3D Transforms also adds a few new CSS properties. In addition to the &lt;code&gt;transform&lt;/code&gt; and &lt;code&gt;transform-origin&lt;/code&gt; properties, IE10 supports vendor-prefixed &lt;code&gt;perspective&lt;/code&gt;,
    &lt;code&gt;perspective-origin&lt;/code&gt;, &lt;code&gt;backface-visibility&lt;/code&gt;, and the &lt;code&gt;flat&lt;/code&gt; value of &lt;code&gt;transform-style&lt;/code&gt;.&lt;/p&gt;
&lt;p style="padding: 4px 8px; background-color: #f0f0f0;"&gt;&lt;b&gt;Note:&lt;/b&gt; The markup examples in this post all use unprefixed properties as defined in the W3C standard. However, at this time all browsers that implement these features do so with vendor-specific prefixes. Please remember to add your browser’s prefix to the example markup when experimenting.&lt;/p&gt;
&lt;h2&gt;Perspective&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;perspective&lt;/code&gt; transform function is important for 3D transforms. It
    sets the viewer’s position and maps the viewable content onto a viewing pyramid,
    which it subsequently projects onto a 2D viewing plane. Without specifying perspective,
    all points in z-space are flattened onto the same 2D plane and there is no perception
    of depth in the resulting transform. For some transforms, such as the translation
    along the Z-axis shown below, the perspective transform function is essential for
    visibly seeing any effect from the transform.&lt;/p&gt;
&lt;p&gt;In the examples below &lt;span style="display: inline-block; width: 1em; height: 1em;
    position: relative; top: 2px; background-color: rgb(255, 235, 204); border: 1px solid rgb(153, 141, 122);"&gt;
&lt;/span&gt;&amp;nbsp;is the original, untransformed element and &lt;span style="display: inline-block;
    width: 1em; height: 1em; position: relative; top: 2px; background-color: rgb(255, 169, 41);
    border: 1px solid rgb(100, 92, 80);"&gt;&lt;/span&gt;&amp;nbsp;is the transformed element&lt;/p&gt;
&lt;table style="margin: auto; max-width: 90%;"&gt;
&lt;tr&gt;&lt;td style="width: 48%; text-align: center;"&gt;&lt;img style="max-width: 100%;" alt="Example of transform: perspective(500px) translate(0px, 0px, -300px);" src="http://ieblog.members.winisp.net/images/20120202-ct-image4.png" /&gt;&lt;/td&gt;&lt;td style="width: 4%;"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width: 48%; text-align: center;"&gt;&lt;img style="max-width: 100%;" alt="Example of transform: translate(0px, 0px, -300px);" src="http://ieblog.members.winisp.net/images/20120202-ct-image5.png" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;code&gt;transform: perspective(500px) &lt;span style="white-space: nowrap"&gt;translate(0px, 0px, -300px);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="text-align: center;"&gt;&lt;code&gt;transform: &lt;span style="white-space: nowrap"&gt;translate(0px, 0px, -300px);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="3"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width: 48%; text-align: center;"&gt;&lt;img style="max-width: 95%;" alt="transform: perspective(500px) rotateY(30deg);" src="http://ieblog.members.winisp.net/images/20120202-ct-image6.png" /&gt;&lt;/td&gt;&lt;td style="width: 4%;"&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="width: 48%; text-align: center;"&gt;&lt;img style="max-width: 95%;" alt="Example of transform: rotateY(30deg);" src="http://ieblog.members.winisp.net/images/20120202-ct-image7.png" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;code&gt;transform: perspective(500px) &lt;span style="white-space: nowrap"&gt;rotateY(30deg);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td style="text-align: center;"&gt;&lt;code&gt;transform: rotateY(30deg);&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;A shortcut for adding the perspective transform to several elements is to use the &lt;code&gt;perspective&lt;/code&gt; property on their parent element(s). The &lt;code&gt;perspective&lt;/code&gt; property applies the perspective transform to each of its child elements:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Example of two divs transformed by the same parent perspective property." src="http://ieblog.members.winisp.net/images/20120202-ct-image8.png" /&gt;&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#parent&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;perspective&lt;/span&gt;: &lt;span style="color: Blue;"&gt;500px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#div1&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;position&lt;/span&gt;: &lt;span style="color: Blue;"&gt;absolute&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;transform-origin&lt;/span&gt;: &lt;span style="color: Blue;"&gt;0px&lt;/span&gt; &lt;span style="color: Blue;"&gt;0px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;transform&lt;/span&gt;: &lt;span style="color: Blue;"&gt;rotateY(30deg)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#div2&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;position&lt;/span&gt;: &lt;span style="color: Blue;"&gt;absolute&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;transform-origin&lt;/span&gt;: &lt;span style="color: Blue;"&gt;0px&lt;/span&gt; &lt;span style="color: Blue;"&gt;0px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;transform&lt;/span&gt;: &lt;span style="color: Blue;"&gt;rotateY(30deg)&lt;/span&gt; &lt;span style="color: Blue;"&gt;translate(220px)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;The &lt;code&gt;perspective-origin&lt;/code&gt; property can also be used in conjunction with &lt;code&gt;perspective&lt;/code&gt; to shift the viewpoint away from the center of the element:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Illustration of the perspective-depth property." src="http://ieblog.members.winisp.net/images/20120202-ct-image9.png" /&gt;&lt;/p&gt;
&lt;p&gt;Below, you can see that shifting the perspective origin to the left makes the content to the right of the original perspective origin appear farther away.&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 95%;" alt="Example of two divs transformed by the same parent perspective-depth property." src="http://ieblog.members.winisp.net/images/20120202-ct-image10.png" /&gt;&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#parent&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;perspective&lt;/span&gt;: &lt;span style="color: Blue;"&gt;500px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;perspective-origin&lt;/span&gt;: &lt;span style="color: Blue;"&gt;-300px&lt;/span&gt; &lt;span style="color: Blue;"&gt;0px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;h2&gt;backface-visibility&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;backface-visibility&lt;/code&gt; property is useful for hiding the backface of content. By default, the backface is visible and the transformed content can be seen even when flipped. But when &lt;code&gt;backface-visibility&lt;/code&gt; is set to &lt;code&gt;hidden&lt;/code&gt;, content is hidden when the element is rotated such that the front side is no longer visible. This can be useful if you want to simulate an object with multiple sides, such as the card used in the example below. By setting &lt;code&gt;backface-visibility&lt;/code&gt; to &lt;code&gt;hidden&lt;/code&gt;, it’s easy to ensure that only the front-facing sides are visible.&lt;/p&gt;
&lt;p style="margin-bottom: 0;"&gt;CSS markup:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;.card&lt;/span&gt;, &lt;span style="color: Maroon;"&gt;.card&lt;/span&gt; &lt;span style="color: Maroon;"&gt;div&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;position&lt;/span&gt;: &lt;span style="color: Blue;"&gt;absolute&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;width&lt;/span&gt;: &lt;span style="color: Blue;"&gt;102px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;height&lt;/span&gt;: &lt;span style="color: Blue;"&gt;143px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;.card&lt;/span&gt; &lt;span style="color: Maroon;"&gt;div:nth-child(1)&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;background-image&lt;/span&gt;: &lt;span style="color: Blue;"&gt;url(&amp;#39;redback.png&amp;#39;)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;.card&lt;/span&gt; &lt;span style="color: Maroon;"&gt;div:nth-child(2)&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;background-image&lt;/span&gt;: &lt;span style="color: Blue;"&gt;url(&amp;#39;8clubs.png&amp;#39;)&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;backface-visibility&lt;/span&gt;: &lt;span style="color: Blue;"&gt;hidden&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p style="margin-bottom: 0;"&gt;HTML markup for one card:&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt; &lt;span style="color: Red;"&gt;class&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;card&amp;quot;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p&gt;Creating six cards as defined above and giving each a &lt;code&gt;style="transform: rotateY(&lt;i&gt;n&lt;/i&gt;deg)"&lt;/code&gt; property with a different rotation value &lt;code&gt;&lt;i&gt;n&lt;/i&gt;&lt;/code&gt;, results in this:&lt;/p&gt;
&lt;table style="width: 766px; margin: auto;"&gt;&lt;tr&gt;&lt;td style="padding: 0 12px;" colspan="6"&gt;&lt;img alt="Sequence of 6 cards rotating from front to back." src="http://ieblog.members.winisp.net/images/20120202-cardflip.png" /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(0deg);&lt;/td&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(36deg);&lt;/td&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(72deg);&lt;/td&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(108deg);&lt;/td&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(144deg);&lt;/td&gt;
&lt;td style="text-align: center; width: 127.67px;"&gt;rotateY(180deg);&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;What’s happening in this example is that when there’s no rotation, you see the second &lt;code&gt;div&lt;/code&gt;, the 8 of clubs&amp;mdash;because it’s the one on top in drawing order. As we apply a rotation to the card and pass 90 degrees, the &lt;code&gt;backface-visibility: hidden;&lt;/code&gt; property of the second &lt;code&gt;div&lt;/code&gt; causes it to become invisible thereby exposing the first &lt;code&gt;div&lt;/code&gt;, the card back.&lt;/p&gt;
&lt;h2&gt;3D Transforms with Animations and Transitions&lt;/h2&gt;
&lt;p&gt;Best of all, you can even use 3D transforms in conjunction with CSS transitions and
    animations. If you are using IE10 or another browser that supports CSS3 Animations of CSS3 3D
    Transforms, try this &lt;a target="_blank" href="http://ieblog.members.winisp.net/images/20120202-scrollText.html"&gt;example of scrolling
        text&lt;/a&gt;, built by animating the &lt;code&gt;transform&lt;/code&gt; property.&lt;/p&gt;
&lt;p&gt;This is the CSS markup that achieves the effect shown in screen shots below.&lt;/p&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black; text-indent: -4em; padding: 0 0.25in;"&gt;&lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#parentDiv&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;perspective&lt;/span&gt;: &lt;span style="color: Blue;"&gt;500px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;perspective-origin&lt;/span&gt;: &lt;span style="color: Blue;"&gt;150px&lt;/span&gt; &lt;span style="color: Blue;"&gt;500px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Maroon;"&gt;#div1&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;transform-origin&lt;/span&gt;: &lt;span style="color: Blue;"&gt;150px&lt;/span&gt; &lt;span style="color: Blue;"&gt;500px&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;&lt;span style="color: Red;"&gt;animation&lt;/span&gt;: &lt;span style="color: Blue;"&gt;scrollText&lt;/span&gt; &lt;span style="color: Blue;"&gt;200s&lt;/span&gt; &lt;span style="color: Blue;"&gt;linear&lt;/span&gt; &lt;span style="color: Blue;"&gt;infinite&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0 0 0 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;@keyframes&lt;/span&gt; scrollText {&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;0% { &lt;span style="color: Red;"&gt;transform&lt;/span&gt;: &lt;span style="color: Blue;"&gt;rotateX(45deg)&lt;/span&gt; &lt;span style="color: Blue;"&gt;translateY(500px)&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0 0 0 6em;"&gt;100% { &lt;span style="color: Red;"&gt;transform&lt;/span&gt;: &lt;span style="color: Blue;"&gt;rotateX(45deg)&lt;/span&gt; &lt;span style="color: Blue;"&gt;translateY(-8300px)&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0 0 0 4em;"&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;/code&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;&lt;img style="max-width: 45%; margin-right: 5%;" alt="Early frame from the demo that animates scrolling text with 3D transforms." src="http://ieblog.members.winisp.net/images/20120202-ct-image13.png" /&gt; &lt;img alt="Later frame from the demo that animates scrolling text with 3D transforms." style="max-width: 45%;" src="http://ieblog.members.winisp.net/images/20120202-ct-image14.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Try It Today&lt;/h2&gt;
&lt;p&gt;Try this out in IE10 on the &lt;a href="http://msdn.microsoft.com/en-us/windows/br229518"&gt;Windows Developer Preview&lt;/a&gt;. The test drive demo &lt;a href="http://ie.microsoft.com/testdrive/Graphics/hands-on-css3/hands-on_3d-transforms.htm"&gt;Hands On: 3D Transforms&lt;/a&gt; can help visualize the possibilities that CSS 3D Transforms enables.&lt;/p&gt;
&lt;p&gt;We’d love to see your creations!&lt;/p&gt;
&lt;p&gt;—Jennifer Yu, Program Manager, Internet Explorer Graphics&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10263341" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/CSS/">CSS</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item><item><title>Web Sites and a Plug-in Free Web</title><link>http://blogs.msdn.com/b/ie/archive/2012/01/31/web-sites-and-a-plug-in-free-web.aspx</link><pubDate>Tue, 31 Jan 2012 17:12:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10262339</guid><dc:creator>ieblog</dc:creator><slash:comments>81</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/ie/rsscomments.aspx?WeblogPostID=10262339</wfw:commentRss><comments>http://blogs.msdn.com/b/ie/archive/2012/01/31/web-sites-and-a-plug-in-free-web.aspx#comments</comments><description>&lt;p&gt;The transition to a plug-in free Web is happening today. Any site that uses plug-ins
    needs to understand what their customers experience when browsing plug-in free.
    Lots of Web browsing today happens on devices that simply don’t support plug-ins.
    Even browsers that do support plug-ins offer many ways to run plug-in free.
&lt;/p&gt;
&lt;p&gt;Metro style IE runs plug-in free to improve battery life as well as security, reliability,
    and privacy for consumers. &lt;a href="http://blogs.msdn.com/b/b8/archive/2011/09/14/metro-style-browsing-and-plug-in-free-html5.aspx"&gt;
        Previously,&lt;/a&gt; we wrote about how we use IE’s Compatibility View List to make
    sure sites that have a plug-in free experience for other browsers provide that same
    experience to IE10 users. This post describes a way for sites that continue to rely
    on plug-ins to provide consumers browsing with Metro style IE the best possible
    experience. &lt;/p&gt;
&lt;p&gt;Developers with sites that need plug-ins can use an HTTP header or &lt;code&gt;meta&lt;/code&gt; tag to signal
    Metro style Internet Explorer to prompt the user.&lt;/p&gt;
&lt;h4 style="margin-bottom: 0.5em;"&gt;HTTP Header&lt;/h4&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;X-UA-Compatible: requiresActiveX=true&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;h4 style="margin-bottom: 0.5em;"&gt;META Tag&lt;/h4&gt;
&lt;code style="display: block; font-family: Consolas, Monospace; font-size: 13px; color: Black;
    text-indent: -4em; padding: 0 0.25in;"&gt;
    &lt;div style="background-color: #f0f0f0; padding: 0 4px 2px 4px;"&gt;
        &lt;p style="margin: 0 0 0 4em;"&gt;&lt;span style="color: Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;"&gt;meta&lt;/span&gt;
            &lt;span style="color: Red;"&gt;http-equiv&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;X-UA-Compatible&amp;quot;&lt;/span&gt;
            &lt;span style="color: Red;"&gt;content&lt;/span&gt;&lt;span style="color: Blue;"&gt;=&amp;quot;requiresActiveX=true&amp;quot;&lt;/span&gt;
            &lt;span style="color: Blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/code&gt;
&lt;p&gt;Metro style IE10 detects these flags, and provides the consumer a one-touch option
    to switch to IE10 on the desktop:&lt;/p&gt;
&lt;p style="text-align: center; font-size: 8.25pt; font-style: italic;"&gt;
    &lt;img style="max-width: 95%; border: 1px solid black;" alt="Screen shot of a fictional video site showing a prompt that reads &amp;quot;The site uses add-ons that require Internet Explorer on the desktop.&amp;quot; Three action buttons are offered: Open, Don&amp;#39;t show again for this site, and Close." src="http://ieblog.members.winisp.net/images/20120131-mtapifw-image1.png" /&gt;&lt;/p&gt;
&lt;p&gt;In addition to respecting these &lt;code&gt;X-UA-Compatible&lt;/code&gt; flags specified by the
    developer, the Compatibility View List can also specify a site that needs to run
    in the desktop.&lt;/p&gt;
&lt;p&gt;This mechanism provides a short-term mitigation. The desktop browsing experience
    and most plug-ins were not designed for smaller screens, battery constraints, and
    no mouse. Providing an easy way to the Windows desktop is the last resort when no
    comparable plug-in free fallback content exists.&lt;/p&gt;
&lt;p&gt;A plug-in free Web benefits consumers and developers and we all take part in the
    transition. IE10 makes it easy to provide the best possible experience while you
    migrate your site.&lt;/p&gt;
&lt;p&gt;—John Hrvatin, Program Manager Lead, Internet Explorer&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10262339" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/ie/archive/tags/Developers/">Developers</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/Add_2D00_ons/">Add-ons</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/HTML5/">HTML5</category><category domain="http://blogs.msdn.com/b/ie/archive/tags/New+in+IE10/">New in IE10</category></item></channel></rss>

