我当前正在实现基于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。请注意,必须为滚动问题应用相同的修复程序。

祝好运:)

07-26 09:18