As Sig suggested there are some changes to the way IE9 handles javascript from previous versions.
I found my answer in /_layouts/1031/init.js in the function ProcessImnMarkers() (Ironically, a function you want to overwrite as empty if you actually WANT to hide the IM Presence stuff).
Here is the original code of the function:
function ProcessImnMarkers()
{ULSxSy:;
for (var i=0; i < imnMarkerBatchSize;++i)
{
if (imnCount==imnElemsCount)
return;
if (IsSupportedMacBrowser())
IMNRC(imnElems[imnCount].getAttribute("sip"),imnElems[imnCount]);
else
IMNRC(imnElems[imnCount].sip,imnElems[imnCount]);
imnCount++;
}
setTimeout("ProcessImnMarkers()",imnMarkerBatchDelay);
}
THIS is the offending line:
IMNRC(imnElems[imnCount].sip,imnElems[imnCount]);
It turns out the ".sip" in that line is referencing a custom HTML attribute. This worked fine in EVERY other version of IE previously, but they removed that ability in their javascript parser to make it more compatible with the standards. See: DOM Expandos
I have another problem with one of the dynamic menus in SharePoint and I am hoping it is the same kind of issues. It was actually very easy to override the broken method above with my own code:
// replace IE Function:
var ProcessImnMarkers = function ()
{
ULSxSy:;
for (var i = 0; i < imnMarkerBatchSize; ++i)
{
if(imnCount==imnElemsCount)
{
return;
}
IMNRC(imnElems[imnCount].getAttribute('sip'),imnElems[imnCount]);
imnCount++;
}
setTimeout("ProcessImnMarkers()", imnMarkerBatchDelay);
};
Thanks again, Sig! I could not have found the answer here, without your help!
UPDATE I tested this out using the IE Developer tools in IE8, and IE7 modes. Everything seemed to work OK in IE8 Mode, but in IE7 the icons showed up and didn't do anything. Let it be known that if you expect people to use IE7 to view your site, you need to include a workaround for that browser to use the .sip method.