当我在页面上添加多个联系人Web部件时,我遇到了sharepoint 2007中的状态指示器问题。
我注意到,当添加多个联系人时,我总是会出现灰色气泡,因此我在互联网上搜索了一个解决方案。有人发现img标签(存在指标气泡)的ID不应该是唯一的。因为SharePoint会自动将静态ID添加到我需要覆盖ID的img标记中。所以我写了这个javascript代码(实际上复制了guid函数; - )):
function S4()
{
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
window.IMNRC = function(native) {
return function(name, elem) {
if(elem != null)
{
if(elem.id="contact_im,type=sip")
{
elem.id = guid();
}
}
native(name, elem);
}
}(window.IMNRC);
我不知道它是不是很好的代码,但是当我将它添加到页面时,气泡显示了联系人的良好存在。 我现在唯一的问题是菜单不起作用。当我将鼠标悬停在状态指示器上时,它会变为灰色,菜单中的所有链接都不起作用。
我的一位同事注意到,当他在场景指示器上方盘旋时,出现了一个带有联系人姓名的工具提示。奇怪的是这个名字与联系人不匹配。当他刷新时,他注意到工具提示中的名字随机变化。所以我认为这与我玩img标签的ID有关。
所以现在我有两个选择: - 或者我需要重新开始并且不要弄乱img标签上的ID,并找到存在指示器问题的另一种解决方案 - 或者我需要解决菜单问题。
有人可以帮助我解决这两个问题吗?
谢谢!
答案 0 :(得分:1)
从纯粹的Javascript角度来看,立即突出的一点是:
if(elem.id="contact_im,type=sip")
应该是:
if(elem.id=="contact_im,type=sip")
这可能就是为什么你的身份证特别奇怪(他们被分配而不是比较)。
答案 1 :(得分:1)
好的,我得到了它的工作:-)。 感谢Stuart修复了我的JavaScript代码,我能够解决我的问题。 修复后菜单问题消失了,但是当我刷新页面时我仍然遇到问题。链接到状态指示符的名称不再与Web部件中的联系人匹配。我注意到名字在完全相反的方向。我注意到我试图覆盖的IMNRC函数被另一个执行此操作的函数调用:
function QueuePopulateIMNRC(sipAddress, element)
{
setTimeout("IMNRC('" + sipAddress + "', document.getElementById('" + element.id + "'));", 100);
}
其中element.id是旧元素。我曾经读过JavaScript只记得重复名称时的最后一个对象,所以我认为这个方法调用导致错误的名称错误。我只需要覆盖QueuePopulateIMNRC函数,以便此时(在document.getelementbyid之前)更改我的状态指示器的ID。
这是我的最终解决方案:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function QueuePopulateIMNRC(sipAddress, element)
{
if(element!=null)
{
if(element.id=="contact_im,type=sip")
{
element.setAttribute('id',guid());
}
}
setTimeout("IMNRC('" + sipAddress + "', document.getElementById('" + element.id + "'));", 100);
}
如果您在隐藏的内容编辑器webpart中或直接在母版页中添加此代码,则在添加多个联系人Web部件时,状态指示符将起作用。