Проблема с меню индикатора присутствия в контактных веб-частях SharePoint 2007 - PullRequest
3 голосов
/ 28 марта 2011

У меня проблема с индикаторами присутствия в sharepoint 2007, когда я добавляю на страницу несколько контактных веб-частей.

Я заметил, что у меня всегда были серые пузыри, когда было добавлено более одного контакта, поэтому я искал решение в Интернете. Кто-то обнаружил, что идентификатор тега img (пузырька индикатора присутствия) не должен быть уникальным. Поскольку SharePoint автоматически добавляет статические идентификаторы в тег 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.

Так что теперь у меня есть 2 варианта: - Или мне нужно начать все сначала и не связываться с идентификаторами, отсутствующими в теге img, и найти другое решение проблемы с индикатором присутствия. - или мне нужно исправить проблему с меню.

Может ли кто-нибудь помочь мне с любым из 2 вариантов?

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Хорошо, у меня все получилось :-). Благодаря Стюарту, который исправил мой код JavaScript, я смог решить мою проблему. После исправления проблема с меню исчезла, но у меня все еще была проблема, когда я обновлял свою страницу. Имена, связанные с индикатором присутствия, больше не соответствуют контакту в веб-части. Я заметил, что имена, где в полном противоположном направлении. Я заметил, что функция IMNRC, которую я пытался переопределить, была вызвана другой функцией, которая сделала это:

function QueuePopulateIMNRC(sipAddress, element)
{
    setTimeout("IMNRC('" + sipAddress + "', document.getElementById('" + element.id + "'));", 100);
}

где element.id был старым элементом. Однажды я прочитал, что JavaScript запоминает только последние объекты в случае дублирования имен, поэтому я подумал, что вызов этого метода вызвал ошибку неправильных имен. Мне просто нужно было переопределить функцию QueuePopulateIMNRC, чтобы в этот момент менялся идентификатор моего индикатора присутствия (до document.getelementbyid).

Это мое окончательное решение:

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);
}

Если вы добавите этот фрагмент кода в скрытую веб-часть редактора контента или непосредственно на свою главную страницу, ваши индикаторы присутствия будут работать, когда вы добавите более одной контактной веб-части.

1 голос
/ 31 марта 2011

Одна вещь, которая сразу бросается в глаза с точки зрения чисто Javascript, заключается в следующем:

if(elem.id="contact_im,type=sip")

Должно быть:

if(elem.id=="contact_im,type=sip")

Возможно, именно поэтому ваши идентификаторы собираютсясвоеобразный (их назначают, а не сравнивают).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...