我当前正在实现基于AJAX的显示搜索结果的Web部件。该搜索结果具有用户名,并且与我要呈现的OCS存在指示器的每个名称相反。该指示器在IE6中可以正常工作,但我无法在IE7 / 8中正常工作。
基本上,IE7 / 8中的问题是呈现了OCS,但是当您将鼠标悬停在它上面时,什么也没有显示。如果尝试向下滚动页面,然后将鼠标悬停在OCS图标上,您将在页面底部看到OCS操作菜单,而不是在用户名的反面看到它。
我的基于AJAX的Web部件使用jQuery post方法向服务器发出请求,并接收json,然后将其呈现给div。
我的用户名HTML如下所示:
<nobr>
<span>
<a target='_blank' href='/ViewExpert.aspx?uid=4'>Some Expert</a>
<img height='1' width='3' border='0' alt='' src='/_layouts/images/blank.gif'><a class='ms-imnlink'
onclick='IMNImageOnClick();return false;' href='javascript:'>
<img height='12' width='12' border='0' id='3' ShowOfflinePawn='1' type='smtp' sip='[email protected]'
src='/_layouts/images/blank.gif' valign='middle' name='imnmark' alt='No presence information' title=''>
</a>
</span>
</nobr>
在页面上呈现以上HTML之后,我调用以下两行代码:
//have to reset this value, otherwise ProcessImn() fails after next AJAX request
imnCount = 0;
ProcessImn();
有什么想法为什么在IE7 / 8中不起作用?
最佳答案
我确信放错位置的控件是由SharePoint 2007中有问题的init.js引起的。init.js不能解决滚动问题。由于您不应该触摸开箱即用的文件并破坏支持,因此您可能希望破解自己的JavaScript,以设置ActiveX NameControl的存在。我不能相信修复。我是通过谷歌搜索找到的。不幸的是,我不记得在哪里读到它。
如果您必须破解SharePoint 2007的init.js,则可以尝试以下操作:
在函数IMNShowOOUI(inputType)中,
我将更改以下行:
oouiX=objRet.oouiX;
oouiY=objRet.oouiY;
到以下内容:
oouiX = (objRet.oouiX - document.body.parentNode.scrollLeft;
oouiY = (objRet.oouiY - document.body.parentNode.scrollTop;
您可能要尝试破解MS示例"Presence in Web Applications"附带的JavaScript,而不是init.js。请注意,必须为滚动问题应用相同的修复程序。
祝好运:)