Overview

Tabs are small Web pages that showcase the real-time communications features in Microsoft® Windows® Messenger and MSN® Messenger (hereafter referred to as “Messenger”). This guide is designed to show you how to create, test, and maintain personalized tab content.

The primary content of the tab is an HTML frameset called by a particular URL; the HTML is served from your servers. Because tab content is in HTML format, it can be adjusted per user, on demand, in accordance with scheduled updates and using Web page techniques.

The following illustrates how you can use a tab to show personally relevant content to your users and encourage them to try new services. The Order History and Wish List sections are unique to the user and offer direct access to the information. The New Features section promotes additional services.

Using Tabs

Users can show or hide tabs from the Tools menu or by clicking the icon on the lower left, as shown in the following. The Messenger interface that displays the contacts list cannot be disabled or deleted through this user interface (UI).

Tab Design Principles

The following are design principles to keep in mind as you develop tab content.

  • Users enjoy personally relevant content. Because you know the user’s Microsoft® .NET Passport Unique ID (PUID), you are able to configure tab content on an individual basis.
  • Tab content should be dynamic. Tabs with fresh and interactive content will enrich your relationship with your customer. Include links to new and currently used services for your customer.
  • For partners implementing Microsoft® .NET Alerts, tab content should be related to the subject matter of the alerts to which your customer subscribes. Because recent .NET Alerts history is shown in the Alerts tab of the Messenger client, saving recent alerts on your tab is redundant. Provide information that complements the subject matter of your alerts. For example, if you offer Tip of the Day alerts, your tab may include the day's tip as well as links to customer service representatives. This gives your users a reason to return on a daily basis.
Note Microsoft will verify that your tab meets all design requirements before moving it into production. Tab testing, however, is still your responsibility. For more information, see Design Requirements and Tab Compliance.
© 2002 Microsoft Corporation. All rights reserved.


Copyright Information

Messenger Tab Implementation Guide

Copyright

This documentation is confidential and proprietary information of Microsoft Corporation.

The example companies, organizations, products, people and events depicted herein are fictitious. No association with any real company, organization, product, person or event is intended or should be inferred.

Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

© 2002 Microsoft Corporation. All rights reserved.

ActiveX, JScript, Microsoft, MSN, Windows, and/or other Microsoft products referenced herein are either registered trademarks or trademarks of Microsoft Corporation in the U.S.A. and/or other countries.


Implementation Requirements

Messenger Tab Implementation Guide

Design Requirements

Before your tab goes into production, Microsoft will review it to ensure it meets the following requirements.

Implement Microsoft .NET Passport

If you plan to provide personalized content on your tab, you must implement Microsoft® .NET Passport. For more information about .NET Passport, see MSDN Downloads.

Do Not Use Multimedia Files

Multimedia files, including audio and video files, Flash, and QuickTime animations delay download and defeat the goal of a fast, responsive display of content. Audio and video files interfere with the voice communication capabilities in the Messenger client.

Animated Graphics Interchange Format files (GIFs) in GIF89a format are acceptable. They are not significantly larger than standard images and the browser component handles them without any dependency on shared libraries, plug-ins, or other functionality that is not present in the basic browser.

Do Not Use ActiveX Controls

Microsoft® ActiveX® controls, particularly those that require download and installation from the Web, should not be used in the tab.

Do Not Use Advertisements

Do not display advertisements on your tab. Your tab may include references to products and services offered by third-party partners if the products and services are offered in connection with your core business and the references do not depict any trademark, service mark, or trade name in any manner other than as text; logos, designs or other stylizations of any trademark, service mark, or trade name (for example, GIFs) are not allowed. In no event can any reference link to a third-party site.

Use Content From or About the Provider Only

Except as noted above, all tab content must be specific to the tab provider. You cannot resell any part of the tab real estate to another party, nor can you use the tab to promote businesses other than your own.

Do Not Use Pop-ups

Do not create windows that are launched through user action on your tab. Links that are required to accomplish specific user interface (UI) tasks, such as configuring the tab, or tab elements that are links to information that does not fit in the UI, such as a calendar entry that has been summarized to a single line or phrase, are acceptable. When you implement links, be sure they open a new browser instead of loading the new HTML on the tab.

Do Not Use Inappropriate Content

Do not use profanity or politically insensitive, sexually explicit, gender-biased, or other inappropriate content on your tab.


General Tab Layout

The Messenger client retrieves an XML descriptor file that contains information about the tabs, including where to find the content, hover text, icons, and other details. The Messenger team maintains the primary descriptor file, which declares the content for tabs that are potentially present, regardless of the provider. For testing purposes, you can specify a local descriptor file that you create and host. The Messenger client will display a tab specified in the secondary file, as well as those specified in the primary descriptor file. For more information, see Testing Tab Content.

Enable Dynamic Content

Tab content initially loads from the specified URL when the user signs in to Messenger. After the initial load, tab content can be refreshed as often as necessary by using the HTTP META refresh mechanism. The mechanism is simple to use. It is understood by nearly all client browsers, delegates requests for new content to the client, and does not require session-tracking on the server side.

For more information about how META refresh intervals and caching affect dynamic content, see HTML Within the Main Frame.

Control the Length of the Refresh Cycle

Whenever possible, common elements included in the HTML should be reused or cached. Elements that are supposed to refresh can get improperly cached (for example, when they are requested through a caching proxy). For information about reusing content, avoiding bad caching, and using the preferred syntax for <HEAD> area tags, including the META refresh, see HTML Within the Main Frame.

Use a Watermark Background Image

To create continuity among tabs, the Messenger team encourages you to produce a background image or "watermark" for your tab. The watermark is a high-percentage alpha Graphics Interchange Format (GIF) file that does not obscure the tab's content. On tabs in languages that flow left to right, the watermark should appear on the lower right. For other languages, it should appear in a place where it will not interfere with the display of text.

See Also

XML Descriptor Files


The Template

Messenger Tab Implementation Guide

Tab Template

A template for the frameset HTML is provided with this documentation. The template contains three named frames, each with a particular purpose:
  • Main frame - the frame in which most of your content appears.
  • Header frame - the frame used to title, or uniquely identify, your tab.
  • Footer frame - the frame that houses common user interface (UI) elements.

The tab frameset HTML should be served by each site that implements a tab.

Note If you are implementing Microsoft® .NET Alerts, it is recommended that your tab footer contain the add .NET Alerts icon that, when clicked, navigates to the .NET Alerts Sign-up page on your site. For more information, see the User Experience and Branding Guidelines section of the .NET Alerts documentation.
In the frameset HTML, set all possible spacing, padding, margins, and borders to 0, as shown in the following.

Sample HTML

<HTML>
<HEAD>
<TITLE>Sample tab</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
</HEAD>
<FRAMESET ROWS="21,*,25" COLS="1" FRAMESPACING="0" FRAMEBORDER="0">
   <FRAME SRC="header.htm" NAME="header" FRAMEBORDER="0" SCROLLING="No" NORESIZE MARGINWIDTH="0" MARGINHEIGHT="0">
   <FRAME SRC="content.htm" NAME="main" FRAMEBORDER="0" SCROLLING="auto" MARGINWIDTH="0" MARGINHEIGHT="0">
   <FRAME SRC="footer.htm" NAME="footer" FRAMEBORDER="0" SCROLLING="No" NORESIZE MARGINWIDTH="0" MARGINHEIGHT="0">
</FRAMESET>
</HTML>

Header Frame

Current tab designs include a navigation control, graphic, or link on the right side of the header. Text-only HREF links are commonly used here. Be sure your text will fit within the limited horizontal and vertical space in the header section.

Instead of a single, dedicated HREF in this navigation space, some earlier tab designs use a Go To drop-down control that creates a small menu of links. If you use a Go To drop-down list, be sure that if the content shown at a link is not scoped for inclusion within the tab, it launches in a separate browser instance (a new or existing named instance), not within the bounds of the tab.

Note The Go To drop-down control in these templates is an image only. It is not a working control with inherent behavior. The templates define a dummy function only.

Do not enable a horizontal or vertical scroll bar in the header frame. Do not allow resizing.

Sample HTML

<HTML>
<HEAD>
<TITLE>frame header content</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
</HEAD>

<BODY BGCOLOR="#ffffff" TOPMARGIN="0" LEFTMARGIN="0">
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" BACKGROUND="img/gradient_top_tile.gif">
  <TR>
    <TD HEIGHT=21 CLASS="Header" STYLE="padding-left: 8px;">MySite</TD>
    <TD ALIGN="right" STYLE="padding-right: 8 px;">
      <A HREF="javascript:ShowMenu()" CLASS="add" ID="goto">go to
      <SPAN STYLE="font-family: Marlett; font-size:smaller;">6</SPAN>
      </A>
    </TD>
    <DIV ID="dropdown" STYLE="display:none" ALIGN=right></DIV>
    </TD>
  </TR>
</TABLE>
<SCRIPT>
function ShowMenu() {
//TODO: add own implementation of the functionality behind the Go To menu
}
</SCRIPT>
</BODY>
</HTML>

Main (Content) Frame

This frame instance is named "main" for purposes of the browser Document Object Model (DOM). The source for this frame should reference the HTML page (or equivalent server-rendered URL) that contains most of your tab's content. For more information, see HTML Within the Main Frame.

Although you should enable vertical scrolling at the frame-definition level, the page should be designed to avoid triggering the scroll bars in a maximum range of common sizes. Avoid horizontal scroll bars.

Sample HTML

<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META HTTP-EQUIV="REFRESH" CONTENT=1200><!--20 minute refresh-->
<SCRIPT>
function toggle(i) {
  if (i.style.display=="none")
  {
  i.style.display="block";
  glyph.src="img/collaps.gif";
  }
   else
  {
  i.style.display="none";
  glyph.src="img/expand.gif";
  }
}
</SCRIPT>

<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
</HEAD>
<BODY BGCOLOR="#ffffff" TOPMARGIN=0 LEFTMARGIN=5 BACKGROUND="img/watermark.jpg" BGPROPERTIES="FIXED">
<P>Body goes here. Time document last loaded is:
<SCRIPT>document.write(document.lastModified)</SCRIPT></P>
<P>Demo of the expand-collapse material (requires the SCRIPT section as-is):</P>
<TABLE WIDTH=100% BORDER="0" CELLSPACING="0" CELLPADDING="0">
  <TR ID="aa">
    <TD>
      <TABLE WIDTH=100% BORDER="0" CELLSPACING="0" CELLPADDING="0">
        <TR>
          <TD ALIGN=left>
            <A HREF="#" onClick="toggle(a)">
            <IMG ID="glyph" SRC="img/collaps.gif" WIDTH="15" HEIGHT="15" BORDER="0" ALT="">
            </A>
          </TD>
          <TD WIDTH="100%" ALIGN="left" BACKGROUND="img/line.gif" STYLE="padding-left: 5px;">
            <A CLASS="label" HREF="#" onClick="toggle(a)" TITLE="Show/Hide">Stuff</A>
          </TD>
          <TD ALIGN=right BACKGROUND="img/line.gif">
          <A CLASS="clear" HREF="#" onClick="toggle(aa)" TITLE="Clear this stuff'">clear</A>
          </TD>
        </TR>
        <TR ID="a">
          <TD></TD>
          <TD COLSPAN="2">
          <IMG SRC="img/bullet.jpg" WIDTH="12" HEIGHT="12" BORDER="0" ALT="">
          <A CLASS="alert" HREF="#">Stuff</A>
          <BR><IMG SRC="img/bullet.jpg" WIDTH="12" HEIGHT="12" BORDER="0">
          <A CLASS="alert" HREF="#">Stuff</A>
          </TD>
        </TR>
        <TR>
          <TD COLSPAN="3">
          <IMG SRC="img/spacer.gif" WIDTH="1" HEIGHT="8" ALT="" BORDER="0">
          </TD>
        </TR>
      </TABLE>
    </TD>
  </TR>
</TABLE>
</BODY>
</HTML>

Footer Frame

If you are implementing Microsoft® .NET Alerts, it is recommended that your tab footer contain the add .NET Alerts icon that, when clicked, navigates to the .NET Alerts Sign-up page on your site. Do not enable a horizontal or vertical scroll bar in the footer frame. Do not allow resizing.

Sample HTML

<HTML>
<HEAD>
<TITLE>Footer</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
</HEAD>

<BODY BGCOLOR="#ffffff" TOPMARGIN="0" LEFTMARGIN="0">

<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" BACKGROUND="img/gradient_bottom_tile.gif">
  <TR>
    <TD WIDTH=100%></TD>
    <TD NOWRAP STYLE="padding-left: 4 px;">,!--button here--></TD>
    <TD><IMG SRC="img/spacer.gif" WIDTH="15" HEIGHT="25" ALT="" BORDER="0"></TD>
  </TR>
</TABLE>
</BODY>
</HTML>


HTML Within the Main Frame

The template file provided with this documentation contains basic code and concepts.

Warning Messages

When you design and test your tab, be sure that your code will not generate browser warning messages. The following are some common browser warning messages:

  • mixed content warnings - If you serve frame content securely with HTTPS, all elements of the frames, framesets, images, and so on must be served securely to avoid the mixed-content warnings.
  • untrusted certificate warnings - If you use a Secure Sockets Layer (SSL) certificate, you must obtain one that is issued by a common trusted root or certificate authority.
  • transition warnings - If you serve your tab content securely, be sure that embedded links do not trigger secure/insecure transition warnings.

Security Settings

Some Microsoft® Internet Explorer options (for example, settings for scripting, cookies, transitions, and so on) affect the appearance of a tab. When you test your tab, do not assume the user's browser uses default settings.

Browser Version

To display tabs, Internet Explorer 4.01 or later must be installed on the computer. When you design your tab, do not assume a specific version of Internet Explorer is available on the user's computer.

META Refresh Syntax

META refresh syntax appears within META tags in the <HEAD> section, as shown in the following.

<HTML>
    <HEAD>
        <META HTTP-EQUIV="REFRESH" CONTENT=seconds>
    </HEAD>
    <BODY>
        ...
    </BODY>
</HTML>

The CONTENT attribute specifies the refresh interval, in seconds. The page will refresh at this interval while it is in the browser.

Determining the META Refresh Interval

When designing your tab, consider how frequently the source information is updated and set the refresh interval accordingly. For example, if your tab displays stock quotes that are updated on the server every 20 minutes, set the tab refresh interval to be less than 20 minutes. If a user makes a change (for example, adds a new stock to track), the tab content should be refreshed immediately.

Other Refresh Methods

You can use other means to refresh content, such as a server-side push of the information. Again, refresh content at a frequency appropriate for the subject matter.

MSThemeCompatible META Tag

Internet Explorer 6 supports a META tag that is used to enable themes within the body of a Web page. Themes will affect your tab's design by overriding the defaults for some elements, such as the text used for form input or the appearance of <INPUT> or <SELECT> controls and related buttons.

To enable Internet Explorer 6 theme compatibility, use the following META tag:

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">

Setting HTTP Headers for Caching

Microsoft® .NET Passport recommends the use of HTTP level headers to prevent the caching of one-time or personal information. The following is Active Server Pages (ASP) syntax.

<%
Response.Expires=-1
Response.AddHeader "Cache-Control", "no-cache"
Response.AddHeader "Pragma", "no-cache"
%>

Caching Problems

Framed content can lead to caching problems, such as the following:

  • The frame content is cached, but the frameset is not. To avoid this problem, use consistent caching across the frameset.
  • Scripts or other non-HTML elements are cached. To correct this problem, on a server or header level, specify that these elements should not be cached.

To prevent caching problems, use a unique changing token, such as the output of a time function, on the query string of each response.

Scripting Objects

In general, do not use embedded scripting objects within tabs. Messenger client-specific tasks should be performed by the user in the Messenger client. If you are implementing .NET Passport, use the .NET Passport profile information to personalize content.

Scripting in Frames

In cases in which scripting must be used, serve all frame content and the frameset itself from the same domain to avoid cross-domain scripting warnings.

Cookies

Although your tab can write cookies, be aware that users may disable them. You should provide fallback implementations for those cases in which cookies are not accessible.

If you write cookies, you should also be aware that based on the Platform for Privacy Preferences (P3P) standards, Internet Explorer 6 enforces new restrictions on third-party use and reuse of cookies. For more information, see P3P and the Internet Explorer 6 developer documentation on MSDN.

Tab Content Configuration User Interface

Because tab space is limited, the tab configuration interface should be provided on a separate, external Web page. Your tab should include a link that, when clicked, causes a new instance of Internet Explorer to load and display the configuration page. Users should see their configuration updates reflected in the tab immediately.

Task-specific User Interface

Your tab can include task-specific user interface (UI). For example, by clicking Edit on the CNBC on MSN® Money tab, you can type a list of symbols you want to monitor in your stock list.

The following can be used to display task-specific UI:

  • User interface elements embedded in HTML, such as drop-down lists, check boxes, radio buttons, and so on.
  • HTML redirect to a separate page that contains UI and is displayed within the tab. Cookies can be used to preserve state from one page to the next.
  • External Web page that displays UI that does not fit on the tab (for example, the configuration page). If you are implementing .NET Passport and want to launch a Web page in a browser, you must use the OpenWithAuth() function to ensure that the target window will be authenticated with the same .NET Passport credentials as the current Messenger user. For more information, see Automatic Authentication Issues.


Up-sell Page

If you plan to provide personalized content on your tab, your tab should display an up-sell message that explains the tab's purpose and encourages users to register. After registration, there should be a clear transition from the Up-sell page and the regular page for the tab.

The following are examples of the Microsoft® .NET Alerts Up-sell page and the way the tab appears after the user registers.

Up-sell page | Personalized information


Tab Thumbnail Graphic

Thumbnail graphics are displayed as user interface (UI) along the left edge of the tab area. When the tab corresponding to the thumbnail graphic is selected and in the foreground, the graphic displays normally. When a tab is not selected, its thumbnail graphic is dimmed or "blued" by a palette-reduction algorithm in the Messenger client.

The thumbnail graphic must be a 45 × 32 Portable Network Graphics (PNG) file with alpha transparency. It should be designed so that it can be clearly seen in either a dimmed or regular state.

Note When designing your thumbnail graphic, be aware that the upper-right and lower-right corners of the 45 × 32 pixel area do not display entirely when the tab is not in the foreground.


Tutorial Overview

The following topics in this tutorial will show you how to create a Messenger tab.

  • Creating the HTML Files
  • Adding a Tab to the Local Registry

Adventure Works is a fictitious Web-based retailer of outdoor sporting goods that is used as an example site throughout this guide. The Adventure Works sample application is available with the Microsoft® .NET Passport Software Development Kit (SDK).

Note To minimize delays in the release of your tab, be sure to test it thoroughly before submitting it to Microsoft. For more information about testing, see Tab Compliance.


Creating the HTML Files

Step 1: Creating the Frameset HTML File

In this file, you will establish the frameset parameters, frame names, locations, and parameters. Set all possible spacing, padding, margins, and borders to 0. Save this file as Index.htm.

The following is an example of the frameset HTML.

<HTML>
<HEAD>
<TITLE>Adventure Works Tab Sample</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
</HEAD>
<FRAMESET ROWS="21,*,25" COLS="1" FRAMESPACING="0" FRAMEBORDER="0">
   <FRAME SRC="header.htm" NAME="header" FRAMEBORDER="0" SCROLLING="No" NORESIZE MARGINWIDTH="0" MARGINHEIGHT="0">
   <FRAME SRC="content.htm" NAME="main" FRAMEBORDER="0" SCROLLING="auto" MARGINWIDTH="0" MARGINHEIGHT="0">
   <FRAME SRC="footer.htm" NAME="footer" FRAMEBORDER="0" SCROLLING="No" NORESIZE MARGINWIDTH="0" MARGINHEIGHT="0">
</FRAMESET>
</HTML>

Step 2: Creating the Header Frame HTML File

The header frame is used to display your company or product name. It should also provide links to the home page or other important pages.

The following example shows a link to the style sheet and the use of a META tag to enable themes.

<HTML>
<HEAD>
<TITLE>Adventure Works Tab Header</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
</HEAD>

If you use a table to control the layout, set all possible spacing, padding, margins, and borders to 0, as shown in the following.

<BODY BGCOLOR="#ffffff" TOPMARGIN="0" LEFTMARGIN="0">
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" BACKGROUND="img/gradient_top_tile.gif">

The Go To link in the header frame can be a simple HREF link or a Microsoft® JScript® control that displays a drop-down list of links. If you want to implement a drop-down list, you must implement your own code in the following <SCRIPT> block.

  <TR>
    <TD HEIGHT=21 CLASS="Header" STYLE="padding-left: 8px;">MySite</TD>
    <TD ALIGN="right" STYLE="padding-right: 8 px;">
      <A HREF="jscript:ShowMenu()" CLASS="add" ID="goto">go to

Save this file as Header.htm.

      <SPAN STYLE="font-family: Marlett; font-size:smaller;">6</SPAN>
      </A>
    </TD>
    <DIV ID="dropdown" STYLE="display:none" ALIGN=right></DIV>
    </TD>
  </TR>
</TABLE>
<SCRIPT>
function ShowMenu() {
//TODO: add own implementation of the functionality behind the Go To menu
}
</SCRIPT>
</BODY>
</HTML>

Step 3: Creating the Main Frame HTML File

If you plan to provide personalized content on your tab, all personalized information will appear here because this is the frame in which you implement Microsoft® .NET Passport authentication. For more information, see .NET Passport Integration.

<HTML>
<HEAD>
<TITLE>Adventure Works Tab Content</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META HTTP-EQUIV="REFRESH" CONTENT=1200><!--20 minute refresh-->
<SCRIPT>
function toggle(i) {
  if (i.style.display=="none")
  {
  i.style.display="block";
  glyph.src="img/collaps.gif";
  }
   else
  {
  i.style.display="none";
  glyph.src="img/expand.gif";
  }
}
</SCRIPT>

The following example shows an order history for the current user and how the OnClick event calls the toggle function, which is used to change the expand/collapse icons to their appropriate state.

<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
</HEAD>
<BODY BGCOLOR="#ffffff" TOPMARGIN=0 LEFTMARGIN=5 BACKGROUND="img/watermark.jpg" BGPROPERTIES="FIXED">
<TABLE width=100% border="0" cellspacing="0" cellpadding="0">
  <TR id="aa"><TD>
  <TABLE width=100% border="0" cellspacing="0" cellpadding="0">
    <TR>
      <TD colspan="3"><IMG src="img/spacer.gif" width="1" height="8" alt="" border="0"></TD>
    </TR>
    <TR>
      <TD align=left>
        <A href="#" onClick="toggle(a)">
        <IMG ID="glyph" src="img/collaps.gif" width="15" height="15" border="0" alt="">
        </A>
      </TD>
      <td width="100%" align="left" background="img/line.gif" style="padding-left: 5px;">
        <A class="label" href="#" onClick="toggle(a)" title="">Order History</A>
      </td>
      <TD align=right background="img/line.gif">&nbsp;</TD>
    </TR>
    <TR id="a">
      <TD></TD>
      <TD COLSPAN="2">
        <IMG SRC="img/bullet.jpg" WIDTH="12" HEIGHT="12" BORDER="0" ALT="">
        <A CLASS="alert" HREF="#">Northwind Traders Backpack</A>
        <BR>
        <IMG SRC="img/bullet.jpg" WIDTH="12" HEIGHT="12" BORDER="0">
        <A CLASS="alert" HREF="#">Contoso X3 Mountain Bike</A>

In a working environment, these links could take the user to an order history page by launching another browser window. For code required to open another browser window, see Automatic Authentication Issues.

      </TD>
    </TR>
    <TR>
      <TD COLSPAN="3"><IMG SRC="img/spacer.gif" WIDTH="1" HEIGHT="8" ALT="" BORDER="0"></TD>
    </TR>
  </TABLE>
  </TD>
  </TR>
  <TR>
    <TD colspan="3"><IMG SRC="img/spacer.gif" WIDTH="1" HEIGHT="8" ALT="" BORDER="0"></TD>
  </TR>
</TABLE>
</BODY>
</HTML>

Save this file as Content.htm.

Step 4: Creating the Footer Frame HTML File

This frame houses the common user interface (UI) elements. If you are implementing Microsoft® .NET Alerts, it is recommended that your tab footer contain the add .NET Alerts icon that, when clicked, navigates to the .NET Alerts Sign-up page on your site.

<HTML>
<HEAD>
<TITLE>Adventure Works Tab Footer</TITLE>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<LINK REL="STYLESHEET" TYPE="text/css" HREF="msgrtabs.css">
<SCRIPT LANGUAGE=JScript>
function OpenWithAuth(TargetURL, SiteID)
{
   var bNoAuth = true;
   var p,e;
   e = window.external;

   if (e != null)
   {
      p = e.MsgrHost;
      if (p != null )
      {
         p.OpenWithAuth(TargetURL, SiteID);
         bNoAuth = false;
      }
   }
   if (bNoAuth)
      window.open(TargetURL);
</SCRIPT>

This script is used to open another browser window and authenticate the user. For more information, see Automatic Authentication Issues.

</HEAD>
<BODY BGCOLOR="#ffffff" TOPMARGIN="0" LEFTMARGIN="0">
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0" BACKGROUND="img/gradient_bottom_tile.gif">
  <TR>
  <TD WIDTH=100%></TD>
  <TD><IMG SRC="img/img_add_alert.gif" WIDTH="18" HEIGHT="19" ALT="" BORDER="0"></TD>
  <TD NOWRAP STYLE="padding-left: 4 px;">
    <A CLASS="add" HREF="javascript:OpenWithAuth('http://www.site.com/', 99999)" TITLE="Sign up for alerts from Adventure Works">
    Add Adventure Works alert
    </A>

This link is an example of how to use the OpenWithAuth method to open another browser window.

  </TD>
  <TD><IMG SRC="img/spacer.gif" WIDTH="15" HEIGHT="25" ALT="" BORDER="0"></TD>
  </TR>
</TABLE>
</BODY>
</HTML>

Save this file as Footer.htm.

You have now created the HTML files for your tab.

See Also

Tab Template


Adding Tab to the Local Registry

Messenger Tab Implementation Guide

Adding a Tab to the Local Registry

Before you can test your new tab on your local computer, you must create an XML descriptor file. For more information see XML Descriptor Files.

The following is an example of an XML descriptor file.

<?xml version="1.0" ?>
<msntabdata>
<tab>
 <image>http://www.site.com/img/demotab.png</image>
 <name>DemoTab</name>
 <tooltip>The demo tab</tooltip>
 <contenturl>http://www.site.com/tabcontent/index.htm</contenturl>
 <notificationid>999999999</notificationid>
 <siteid>99999</siteid>
 <hidden>false</hidden>
</tab>
</msntabdata>
Save this file as SampleTabDescriptorFile.xml.

Registration File

You can display your tab on your local computer before you submit it to Microsoft. The Microsoft® Windows® registry has a key called OEMTabs that will point to the local XML file (SampleTabDescriptorFile.xml). Because it may be necessary to register your descriptor file several times during testing, you can create a registration file that will quickly save your settings.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\MessengerService]
"OEMTabs"="http://localhost/tutorial/sample/SampleTabDescriptorFile.xml"

Make sure you have the correct URL for the XML descriptor file. Save this file as EnableTab.reg. You can now execute the .reg file and your setting will be saved in the Windows registry. Your tab should now be displayed in Messenger.


Service Considerations

If you serve your tab content URL securely with HTTPS, you must obtain a certificate from a trusted certificate authority in Microsoft® Internet Explorer 6 browsers. All images, frame sources, and other elements required for rendering should also be served securely to avoid mixed-content warnings.

Microsoft® .NET Passport authentication may require secure-insecure transitions. (The .NET Passport Login server URLs are initially served nonsecurely. There is an unavoidable secure/insecure transition in the .NET Passport sign-in sequence.) Most browsers allow users to select that they be warned when changing between secure and insecure mode, so you may want to provide a message to users that HTTP/HTTPS transition behavior is acceptable in this situation.

Note The tab thumbnail graphic, which is specified by the <image> tag in the XML descriptor file, must be served through HTTP. It will not load or render if served through HTTPS.

Serve tab content by a DNS hostname, not an IP address. For more information, see the .NET Passport Software Development Kit (SDK).

HTTP Errors

If a request for an element of tab content does not return an HTTP OK status code (200), then the engine that displays content in Messenger tabs behaves as a browser would. If the element is the base URL of the request, then the user sees the error page that the browser and server display in response. For example, a page not found (404) error will display either the browser's default 404 error page or a custom error sent back from the server (or proxy), assuming that at least the host portion of the URL was resolvable.

Missing elements, such as style sheets or scripts, will not load. Missing images display the browser's default missing-image placeholder. If a tab thumbnail graphic is missing, Messenger code displays a question mark image in the tab outline area. This question mark indicates only that the image is missing; tab content may be accessible to the user.

It is imperative that you maintain a constantly accessible and error-free tab source server. End users will not be able to determine that a 404 error in the tab is not an error in Messenger itself; support requests may be misrouted if your servers fail to consistently serve valid responses.

Logging

Tab partners are required to submit to Microsoft a monthly report of tab traffic, including the number of times the tab was accessed (logging should be implemented in such a way that an automatic refresh of tab content does not count as another hit), the number of unique users, and the number of click-throughs from links on the tab. To submit your report, send e-mail to tabsupp@Microsoft.com and attach a completed Microsoft® Excel spreadsheet with the following column structure.

  • Company Name
  • Report Date (Month, Year)
  • Monthly Total of Preview Tab Access/Use
  • Monthly Total of Unique End-User Access/Use (only if .NET Passport has been implemented)
  • Monthly Total of End-User Click-Throughs

See Also

HTML Within the Main Frame


.NET Passport Integration

To provide personalized tab content, you must authenticate with Microsoft® .NET Passport.

Using .NET Passport and Credential Manager in Windows XP

Because .NET Passport does not provide a high-level application programming interface (API) for the automatic and silent authentication of users based on sign-in names and passwords, this action is handled through the Credential Manager in Microsoft® Windows® XP.

To use the .NET Passport sign-in process in the Credential Manager, you must implement the .NET Passport Software Development Kit (SDK) 1.4 or later. If a Windows XP user accesses a site that uses an earlier version of the SDK, the sign-in screen will appear in the browser. Prompting a user for sign-in information after the user has already signed in to Messenger leads to confusion and a generally bad user experience.

For information about upgrading Passport Manager code from an earlier version, download the .NET Passport SDK, available from MSDN Downloads.

Configuring Clients Without .NET Passport Integration in the Preproduction Environment

The Credential Manager for Windows XP will authenticate in the Production environment, but sites that are still in the process of developing and testing their .NET Passport implementations are authenticating in the Preproduction (PREP) environment. For information about how to configure Windows XP to authenticate in another .NET Passport environment, see the .NET Passport SDK.

Kids Passport

Kids Passports are defined as those Passport accounts held by residents of the United States or its territories who are under the age of 13. Users who sign in with Kids Passports will not be able to view or use Messenger tabs. Other Messenger client functionality may also be restricted. For more information about Kids Passport service and enforcement, see the Kids Passport section of the .NET Passport SDK.


Automatic Authentication Issues

The following scenario illustrates an important authentication issue in Microsoft® Windows® XP:

A user signs in to Messenger as user A, saves the password by checking the Sign me in automatically check box, and then signs out. Later, the user signs in as user B, but does not save the password. Although the tab will display the correct content, the links will be authenticated against user A automatically, causing a mismatch of the tab content and the resulting browser window.

Workaround: OpenWithAuth Method

For links that open a new window that contains personalized information, you must use the OpenWithAuth method, which ensures the target window will be authenticated with the same Microsoft® .NET Passport credentials as the current Messenger user. The OpenWithAuth method performs an MD5 authentication before launching the new browser. Use OpenWithAuth instead of calling window.open.

Note The OpenWithAuth method should be used on other platforms to avoid prompting the user for credentials each time a new window is opened.
<SCRIPT LANGUAGE=JScript>
function OpenWithAuth(TargetURL, SiteID)
{
   var bNoAuth = true;
   var p,e;
   e = window.external;

   if (e != null)
   {
      p = e.MsgrHost;
      if (p != null )
      {
         p.OpenWithAuth(TargetURL, SiteID);
         bNoAuth = false;
      }
   }
   if (bNoAuth)
      window.open(TargetURL);
</SCRIPT>


Testing Tab Content

To test your tab content, specify a URL for an XML descriptor file in a registry string named OEMTabs. Messenger will check for the presence of this string; if found, it will load the XML descriptor file, as shown in the following.

HKEY_LOCAL_MACHINE\Software\Microsoft\MessengerService\OEMTabs = "=http://testserver1/tabxml.xml"

The <contenturl> tag in the XML descriptor file can point to a localhost reference. The <image> tag must always be an http:// protocol reference. Do not use https:// or file:// references.

To reload the XML descriptor file, close and then restart Messenger. If the hidden parameter is set to false, the tab will display. If the hidden parameter is set to true, the user must enable the tab from the Tools menu by selecting Show Tabs.

See Also

XML Descriptor Files


Tab Compliance

Before your tab can be moved into production, Microsoft must verify it meets all of the tab design requirements and passes the following tests. Use these and other tests to confirm the functionality and conformance of your tab.

Note You are responsible for the thorough testing of your tab. Failure to do so may result in errors and a delay in the deployment of your tab.

Platforms

You must perform these tests on the following operating systems and versions of Microsoft® Internet Explorer:

Operating Systems

  • Microsoft® Windows® 95
  • Microsoft® Windows® 98
  • Microsoft® Windows NT® 4.0 or later
  • Microsoft® Windows® Me
  • Microsoft® Windows® 2000
  • Microsoft® Windows® XP

Internet Explorer

  • Microsoft® Internet Explorer 4.01
  • Microsoft® Internet Explorer 5.0
  • Microsoft® Internet Explorer 5.5
  • Microsoft® Internet Explorer 6.0

.NET Passport Authentication

If you are implementing Microsoft® .NET Passport, you must use the following test to verify that your tab has correctly implemented the service.

  1. Sign in to Messenger with your .NET Passport and select your tab. Your tab should sign in with your .NET Passport automatically.
  2. Click any Customize or Personalize this tab link. Your tab should pass the authentication to any pages loaded in a separate browser instance and sign in without prompting for credentials.

Personalized Settings

This test verifies that any customization or personalized settings will be saved successfully. It also verifies that multiple users can perform these functions on the same computer and receive correct personalized content.

  1. Sign in to Messenger. (If you are running Windows XP, be sure to check the Sign me in automatically check box).
  2. Click your tab and confirm that it signs in with .NET Passport automatically.
  3. Click any Customize or Personalize this page link. Your tab should pass the authentication to any pages loaded in a separate browser instance and sign in automatically without prompting for credentials. For more information, see the OpenWithAuth method in Automatic Authentication Issues.
  4. Make customizations to the page, save, and then close.
  5. Press F5 to refresh and confirm that the customizations appear on the tab.
  6. Sign out of Messenger and then sign back in using the same .NET Passport.
  7. Click your tab and confirm that saved customizations appear. Click any links that bring up personalized content in a browser and verify the correct content is displayed.
  8. Sign out of Messenger and sign in with a different .NET Passport. (If you are running Windows XP, do not check the Sign me in automatically check box.) Repeat Steps 2-7.
  9. Sign out of Messenger and sign in with the .NET Passport used in Step 1. (If you are running Windows XP, from the File menu, select Sign In as <username>.) Click your tab and verify that correct personalized content is displayed. Click any links that bring up personalized content in a browser and verify the correct content for this user is displayed.

Cookies

Persistent .NET Passport authentication cookies are not allowed.
  1. Sign out of Messenger and close all other applications.
  2. Open Internet Explorer and navigate to one of the personalized pages that is linked to from the tab.
  3. Confirm that you are prompted for credentials.

Hyperlinks Resolve to Correct Pages

This test verifies that all hyperlinks resolve correctly and spawn new pages outside of Messenger.

  1. Click a hyperlink. Confirm that it spawns a new page and that the displayed page is correct.
  2. Repeat for all hyperlinks on your tab.

Messenger Integration

This test verifies that your tab functionally integrates with Messenger.

  1. Sign in to Messenger with any .NET Passport. Confirm that Messenger loads successfully and displays the contacts list and all default tabs.
  2. Select all tabs, including your own. Switch back and forth between your tab and default tabs. The selection of tabs should occur smoothly and without much delay in the display of content and images.
  3. Sign out of Messenger and verify that you can do so without error.

Internationalization and Localization

This test verifies that your tab displays properly (that is, according to the country and language settings specified in the .NET Passport).

  1. Sign in to Messenger with a .NET Passport whose profile information specifies the country and language of the tab you are testing.
  2. Move the mouse pointer over your tab’s graphic to check the ToolTip. The ToolTip should display text in the correct language.
  3. Select your tab. All text and content should appear in the correct language.
  4. Repeat for all languages in which your tab will be displayed.

Stress Testing

You should stress test your tab. The following are examples of stress tests. Your tab may require other tests.

  1. Sign in to Messenger with any .NET Passport and select your tab.
  2. Refresh your tab repeatedly.
  3. Click submit buttons repeatedly.
  4. Enter data that should not be entered into fields (for example, letters in a date field).

Accessibility

These tests verify that your tab complies with a basic level of accessibility for people with disabilities. Your tab should meet all Priority 1 principles of accessible design outlined in the Web Content Accessibility Guidelines at http://www.w3.org/TR/WCAG10/#Guidelines. The World Wide Web Consortium (W3C) site offers techniques that can be used to make your tab accessible.

Note Quick changes from dark to light and flickering or flashing content in the range of 4 to 59 flashes per second (with an average peak sensitivity of 20 flashes per second) can trigger seizures in people with photosensitive epilepsy.

  1. Move the mouse over every non-text element on your tab.
    2. Verify that there are ALT text descriptors for non-text elements, such as images, symbols, frames, scripts, list bullets, spacers, and graphical buttons.
  2. Verify that all information conveyed using custom colors is also available if the user has specified that custom colors should be ignored.
    1. Launch Internet Explorer.
    2. On the Tools menu, select Internet Options. (In Internet Explorer 4.01, on the View menu, select Internet Options.)
    3. On the General tab, click the Accessibility button.
    4. In the Accessibility dialog box, under Formatting, check Ignore colors specified on Web pages.
    5. Open your browser to the Web page you are testing.
    6. Verify that disabling custom colors does not result in the loss of information.
  3. Verify any changes in the natural language of a document's text and textual equivalents are clearly identified through markup or HTTP headers.
    1. From the View menu, select Source.
    2. In the source HTML, verify the use of the lang attribute (or, in XML, the xml:lang attribute).
  4. Ensure that textual equivalents for dynamic content are updated when the dynamic content changes.
    5. For example, verify that as the contents of a frame change, the descriptions change, too.

    Note This is not possible if an IMG tag is used directly in a frame; always make an HTML file the source (src) of a frame. Images can be inserted into the HTML file and their text alternatives will revolve correctly.

  5. Using a screen reader (for example, JAWS), verify that your tab's content can be read correctly.
    1. Open your tab, and then start the screen reader.
    2. Verify that the content can be clearly understood.
    Note Consistent page layout, easily recognized graphics, and easy-to-understand language benefit all users, not just those with cognitive disabilities or those who have difficulty reading. Be sure that images used on your tab have textual equivalents for people who are blind, have low vision, or have chosen not to view graphics.
  6. Verify that row and column headers are used in tables.
    1. On the View menu, select Source.
    2. In the source HTML, verify that TD is used for cells and TH is used for headers so that these elements can be identified by a screen reader.
  7. Verify tables that have two or more logical levels of row or column headers use markup to associate data cells and header cells.
    1. On the View menu, select Source.
    2. In the source HTML, verify THEAD, TFOOT, and TBODY are used to group rows; COL and COLGROUP are used to group columns; and axis, scope, and headers attributes are used to describe more complex relationships among data.
  8. Verify that each frame that facilitates frame identification and navigation has a title.
    1. On the View menu, select Source.
    2. In the source HTML, verify the title attribute on FRAME elements.
  9. Your tab must be readable when it is rendered without any support for scripts, applets, or other programmatic objects or you must provide equivalent information on an alternative, accessible page.
  10. Use features that enable the activation of page elements through a variety of input devices, such as a mouse, keyboard, voice, head wand, and so on. For example, if a form control can only be used with a mouse or other pointing device, someone who is using the page through an alternative access method (for example, through voice input or a keyboard) will not be able to use the form.
    • Ensure that any element that has its own interface can be operated in a device-independent manner.
    • Create a logical tab order through links, form controls, and objects by specifying the tabindex attribute.
    • Provide keyboard shortcuts to important links, including those in client-side image maps, form controls, and groups of form controls by specifying the accesskey attribute.


Submitting the Tab

Messenger Tab Implementation Guide

Submitting Your Tab

After you have thoroughly tested your tab, you are ready to submit it to Microsoft, where its functionality and design will be reviewed for compliance to company standards. To request a review of your tab, send an e-mail to tabsupp@Microsoft.com and include the following information.

Tab Name

This is the company or product name that will appear in a menu in the Messenger client. The tab name is not localized.

Tab ToolTip

This is a short phrase that appears when the user rests the pointer over the tab icon. The ToolTip can be the name of your company or product, a description of features offered by this tab, or a company tag line or slogan. This text should be localized to the appropriate language before you submit your tab to Microsoft.

.NET Alerts Site ID

If you are implementing Microsoft® .NET Alerts, you must submit your Site ID, which is the identification number issued by Microsoft at the time of registration. This ID corresponds to the <notificationid> used in the XML descriptor file.

.NET Passport Site ID

If you are implementing Microsoft® .NET Passport, you must submit your Site ID, which corresponds to the <siteid> used in the XML descriptor file.

Content URL

This is a URL that points to the tab content file. You must provide URLs for both the Preproduction (PREP) and live environments.

Thumbnail Graphic URL

This is a URL that points to the Portable Network Graphics (PNG) image that will be displayed in the Messenger user interface (UI). You must provide URLs for both the PREP and live environments.

See Also

XML Descriptor Files


Styles

Messenger Tab Implementation Guide

Style Sheets

A tab is not intended to look like a Web page. Design your tab so that its elements appear unified and like part of the user interface (UI). For basic formatting, you are encouraged to use the cascading style sheet (CSS) provided with this documentation.

The following is the msgrtabs.css file referenced in the sample HTML template files.

Body {
  background-repeat : no-repeat;
  background-position : 60%;
}
.Header {
  font : bold 10pt tahoma, Verdana, Arial;
  color : #000000;
  text-decoration : none;
  line-height : 14pt;
}
A.label {
  font : bold 8pt tahoma, Verdana, Arial;
  color : #003399;
  text-decoration : none;
  line-height : 14pt;
}
A.label:HOVER {
  color : green;
  text-decoration : none;
}
A.clear {
  font: bold 8pt tahoma, Verdana, Arial;
  color : #bbbbbb;
  text-decoration : none;
}
A.clear:HOVER {
  color : red;
}
A.alert {
  font: 8pt tahoma, Verdana, Arial;
  color : Black;
  text-decoration : none;
  line-height : 12pt;
}
A.alert:HOVER {
  color : Blue;
  text-decoration : underline;
}
A.delete {
  font: bold 8pt tahoma, Verdana, Arial;
  color : #6D788F;
  text-decoration : none;
  line-height : 14pt;
}
A.delete:HOVER {
  color : red;
  text-decoration : none;
}
A.add {
  font: bold 8pt tahoma, Verdana, Arial;
  color : #6D788F;
  text-decoration : none;
  line-height : 14pt;
}
A.add:HOVER {
  color : Blue;
  text-decoration : none;
}

Integrating Style Sheets

Style sheets are called within the main frame through <LINK REL="[stylesheet]">, which places Messenger styles at level 1 of the cascading model.

Although you are encouraged to use the styles as defined through the style sheet at level 1, you can define a second level 1 style (as a LINK REL called sequentially after the Messenger-specific style sheet). Set styles at the page or tag level only where necessary. Do not use <FONT> tags; use STYLE attributes for other tags instead.


Tab Visual Library

The following section is a visual library that includes graphic images, templates, and style sheets used to implement tabs. You are encouraged to use these library elements in your design. The use of the templates and visual library ensures your tab design will be consistent with the other tabs displayed in the Messenger client. Also, tabs literally overdraw themselves in the client UI when the user selects between the tabs. Consistent visuals in some of the common areas of the tabs will make these transitions still seem like they are being enabled within the same client.

Footer gradient background

File name | gradient_bottom_tile.gif
Height | 25 pixels
Width | 6 pixels
Format | Graphics Interchange Format (GIF), 256-color adaptive palette, no transparency

This gradient should form the background of the entire footer frame. The image tiles horizontally. The top portion is a single-pixel, solid-blue line that separates the footer and the main frame.

Header gradient background

File name | gradient_top_tile.gif
Height | 21 pixels
Width | 6 pixels
Format | GIF, 256-color adaptive palette, no transparency

This gradient should form the background of the entire header frame. The image tiles horizontally. The bottom portion is a single-pixel, solid-blue line, which separates the header and the main frame.

Bullet

File name | bullet.jpg
Height | 12 pixels
Width | 12 pixels
Format | Joint Photographic Experts Group (JPEG), 24-bit

This bullet can be used instead of a standard <LI> tag bullet.

Expand/collapse pair

/
File name | expand.gif / collaps.gif
Height | 15 pixels
Width | 15 pixels
Format | GIF, 256-color adaptive palette (56 colors used), no transparency

Note This image pair does not have an alpha channel; it is aliased against a white background. If you want to use this image pair against a background other than white, you must change the aliasing.

Horizontal line

File name | line.gif
Height | 17 pixels
Width | 3 pixels
Format | GIF, 256-color adaptive palette, transparency set to black in file

This graphic tiles horizontally and provides an alternative to the <HR> tag. In the template files, this line sets off the example expand/collapse section from its header and top-level control section.


XML Descriptor Files

XML descriptor files are the means by which Messenger identifies the following:

  • the tabs to be displayed.
  • the user interface (UI) elements for each tab.
  • the URL of the HTML content within the tab when it is selected.

Contents of the XML Descriptor File

The following elements appear in the XML descriptor file.

<msntabdata>

The top-level container tag for an XML descriptor file. This tag should have a single <tab> child container within it.

<tab>

The second-level container tag for an XML descriptor file. All of the following tags are child nodes of <tab>.

<image>

The URL in http:// format of the Portable Network Graphics (PNG) image that is displayed in the Messenger UI. This image is dimmed programmatically when the tab to which it corresponds is not selected. For more information, see Tab Thumbnail Graphic.

<name>

The display label of the tab. This label appears in the menus that are used to customize tab displays.

<tooltip>

The text to display when a user hovers the mouse over the outline tab image for this tab.

<contenturl>

The URL from which the tab content should be accessed. This URL should point to the tab template frameset as served from the site, not the specific "main" content frame.

For information about using an HTTPS URL or an IP number for this value, see Service Considerations. Because the query string can be parsed to determine the language of the installed Messenger client, you can help determine the language in which the tab content should appear.

<hidden>

A Boolean. Unless its display has been disabled by the user, a value of false will show this tab when it is first loaded (potentially unselected) in the Messenger UI on startup. Unless its display is enabled by the user, a value of true will not show this tab. Users can show or hide tabs from the Tools menu or by clicking the icon in the lower left of the screen.

<notificationid>

This tag should contain the integer value of the Site ID obtained through the Microsoft® .NET Alerts registration process.

Note This element is required only if you are implementing .NET Alerts and Microsoft® .NET Passport.

<siteid>

This tag should contain the integer value of the Site ID obtained through the .NET Passport site registration process.

Note This element is required only if you are implementing .NET Passport.

XML Descriptor File Example

<?xml version="1.0" ?>
<msntabdata>
<tab>
 <image>http://www.site.com/img/demotab.png</image>
 <name>DemoTab</name>
 <tooltip>The demo tab</tooltip>
 <contenturl>http://www.site.com/tabcontent/index.htm</contenturl>
 <notificationid>999999999</notificationid>
 <siteid>99999</siteid>
 <hidden>false</hidden>
</tab>
</msntabdata>


Tab Selection Logic

This topic describes the logic that is used to determine which tabs are shown in the Messenger client. The Messenger client gathers a number of parameters and passes them to a script. The script then performs some logic to determine which XML file should be returned to the client. The XML file contains several pieces of information for each tab that allows the client to display the tabs and contents.

The Messenger client builds a query string that contains the following parameters:

  • PLCID - The locale ID (LCID) that corresponds to the language of the client.
  • Version - The version number of the client.
  • CLCID - The Microsoft® .NET Passport LCID for the currently local user.
    Note     The client will not receive this information if the user has chosen not to share .NET Passport profile information. If this parameter is not returned, the client will use the Windows Regional Settings LCID instead.
  • BrandID - The brand ID that identifies the client.
  • Country - The .NET Passport country code for the currently signed in user. Uses the two letter ISO 3166 country code.
    Note The client will not receive this information if the user has chosen not to share .NET Passport profile information.

The following is an example of a query string:

?PLCID=0409&Version=4.5&CLCID=0409&BrandID=MSMSGS&Country=US

After the query string is built, the client sends the information to a Web-based script in which the parameters are used to determine which tabs will be returned. The XML file returned from this script determines which tabs will be displayed in the client.

There are currently 30 variations of the XML file returned from the tab script. (This number will change as Microsoft adds support for more markets.) The script first attempts a match on the Country parameter. If the country matches one of the supported countries, the appropriate XML file is returned. If no match is found, the script attempts to find a match on the CLCID parameter (which is supplied by the Windows Regional Settings if .NET Passport profile information is not shared). If there is no match on either Country or CLCID, the script returns an empty XML file; no tabs will be displayed in the client.

If a match is found on the Country parameter and the country supports multiple languages (Canada, Belgium, and Switzerland), the script checks the PLCID parameter to determine which language version of the XML file should be returned.

The following table shows markets that are currently supported. Each market has its own XML file describing the tabs for that market. If no market is matched, an empty XML file is returned, which results in no tabs being shown in the client.

Country | PLCID 1 | CLCID
AT-Austria |  | 0c07
AU-Australia |  | 0c09
BE-Belgium |  | 0813
BE-Belgium | ??0C | 080c
BR-Brazil |  | 0416
CA-Canada |  | 1009
CA-Canada | ??0C | 0c0c
CH-Switzerland |  | 0807
CH-Switzerland | ??0C | 100c
CN-China |  | 0804
DE-Germany |  | 0407
ES-Spain |  | 0c0a
FR-France |  | 040c
GB-United Kingdom UK-United Kingdom |  | 0809
HK-Hong Kong |  | 0c04
IN-India |  | 4009
IT-Italy |  | 0410
JP-Japan |  | 0411
KO-Korea |  | 0412
AR-Argentina BO-Bolivia CL-Chile CO-Colombia CR-Costa Rica EC-Ecuador SV-El Salvador GT-Guatemala HN-Honduras NI-Nicaragua PA-Panama PY-Paraguay PE-Peru UY-Uruguay VE-Venezuela |  | 2c0a 400a 340a 240a 140a 300a 440a 100a 480a 4c0a 180a 3c0a 280a 380a 200a
MX-Mexico |  | 080a
MY-Malaysia |  | 4409
NL-The Netherlands |  | 0413
NZ-New Zealand |  | 1409
PT-Portugal |  | 0816
SE-Sweden |  | 041d 081d
SG-Singapore |  | 4809
TW-Taiwan |  | 0404
US-United States |  | 0409
ZA-South Africa |  | 1c09

OEM Tab

In addition to retrieving the tabs, the client also checks the contents of the registry key to see if there is an OEM tab defined.

This is the key that can be used to test your tab before it goes into production. The XML returned from this URL, if any, provides the information required to display the OEM tab. This tab will always display at the bottom of the tabs in the client.

1 The PLCID is used only if the country code is BE, CA, or CH. If the last two characters of the PLCID are "0C", the French version of the XML file is used; otherwise, the default language for the country is used (Dutch for Belgium, English for Canada, and German for Switzerland).