Отключить функцию Lync Click to Call для обнаружения номеров на веб-странице - PullRequest
15 голосов
/ 18 июля 2011

Есть ли способ запретить Microsoft Lync обнаруживать телефонные номера на веб-странице и добавлять значок щелчка для вызова на этот телефонный номер в Internet Explorer?

Очевидно, что клиент может отключить эту функцию в Интернете.Проводник, однако я хотел бы отключить это для всех, кто посещает определенный веб-сайт, поскольку он не очень хорошо работает со встроенными шрифтами, используемыми на веб-сайте.

Чтобы сделать это для Skype, я бы добавил следующий метатегв заголовок моей веб-страницы:

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />

Спасибо,

Питер

Ответы [ 5 ]

16 голосов
/ 24 февраля 2012

Я нашел несколько вариантов, но ни один из них не был настолько простым и понятным, как добавление мета-тега на страницу (которую Microsoft обязательно должна предоставить нам в качестве опции).

Вариант № 1: вставьте разметку в свой номер телефона

Добавление чего-то вроде пробела SPAN в середину номера телефона достаточно, чтобы исключить обнаружение Линка. Это очень ручной вариант, так как он требует, чтобы вы редактировали каждый номер телефона на странице. Но это может быть удобно для отключения одного или двух номеров на странице, позволяя при этом обнаруживать любые другие.

<p>For help, please call 1-<span></span>800-555-1234.</p>

Вариант № 2: избавиться от дополнительной разметки

Похоже, что Lync форматирует телефонные номера очень предсказуемым образом. Он оборачивает SPAN вокруг числа, используя (насколько я могу судить) непротиворечивое имя класса, затем добавляет привязку A, которая содержит значок набора номера.

<!-- Lync formatting -->
<p>For help, please call
  <span class="baec5a81-e4d6-4674-97f3-e9220f0136c1" style="white-space: nowrap;">
    1-800-555-1234 
    <a title="Call: 1-800-555-1234" style="...">
      <img title="Call: 1-800-555-1234" src="data:image/png;base64,..."/>
    </a>
  </span>
.</p>

Учитывая, что этот уникальный Guid используется для имени класса, вы можете настроить его на свой собственный клиентский скрипт и скрыть его или сделать что-нибудь еще. Подход jQuery для скрытия всех значков Lync может выглядеть следующим образом:

$("span.baec5a81-e4d6-4674-97f3-e9220f0136c1 > a").hide();

UPDATE! Вариант № 2а: отложить дополнительную разметку

Используя ту же технику, что и в приведенном выше примере сценария, вы можете просто стереть нежелательный тег привязки с помощью CSS. Это должно быть предпочтительнее решения на основе сценариев.

span.baec5a81-e4d6-4674-97f3-e9220f0136c1 > a {
   display: none !important;
}

Вариант № 3: Использовать якорь TEL в качестве упреждающего удара

Существует стандартизированный способ для разметки телефонного номера для совместимости с программами VOIP / набора номера. Он использует стандартный A якорь с tel: протоколом. Это имеет двойной эффект: не только отключается навязчивая разметка Lync, но и обеспечивается лучшая поддержка всего, что знает, как набирать номер (Skype), и мобильных устройств (как iOS, так и Android).

<p>For help, please call <a href="tel:1-800-555-1234">1-800-555-1234</a>.</p>

Теперь пользователи Lync могут по-прежнему щелкать ссылку, которая предложит им «открыть» ее с помощью Lync, независимо от используемого ими браузера (я подтвердил совместимость с IE9, Firefox и Chrome). Это кажется мне лучшим из двух миров: совместимость с пользовательским приложением телефонии, без проблем со всей разметкой и макетом.


Пока Microsoft не примет мета-тег для решения этих проблем, мы выбрали №3.


ОБНОВЛЕНИЕ: Включено предложение от @ marsman57 для улучшения опции CSS # 2

4 голосов
/ 23 августа 2013

Я предложил изменить вариант № 2, но пока он не будет одобрен, я оставлю это здесь. Причина проблемы user2200197 заключается в том, что необходимо указать тег! Important, поскольку тег привязки указывает отображаемое значение, которое переопределяет его в противном случае.

span.baec5a81-e4d6-4674-97f3-e9220f0136c1 > a {
   display: none !important;
}
2 голосов
/ 11 марта 2013

Я нашел следующие регулярные выражения (в этом блоге ), которые, похоже, использует плагин Lync:

(\+?1[\-\. ])?(\(\d{3}\)|\d{3})[\-\. ]?\d{3}[\-\. ]?\d{4})
((\+?1[\-\. ])?(\((800|880|888|877|866|855|844|900)\)|(800|880|888|877|866|855|844|900))[\-\.0-9A-Za-z]{7,9})
(\+\d+[\-\. ](\(\d+\)[\- ]?)?\d[\d\-\. ]+\d)
((x|X)\d{3,5})

Поэтому использование &nbsp; или &dash; должно предотвратитьLync от обнаружения номеров.

1 голос
/ 10 сентября 2015

Я нашел полезный фрагмент для удаления знака вызова Lync здесь . Он заменяет дефис в номере телефона похожим символом и больше не идентифицируется как номер телефона.

1 голос
/ 22 марта 2013

Мне не удалось заставить Вариант 2 работать. Я думаю, это потому, что надстройка срабатывает после загрузки страницы. Так что это заставило меня задуматься ... Если я активирую это после 5 секунд загрузки страницы, то скрою элементы. Эта теория оказалась успешной, но она также скрыла и номер телефона.

Я сделал еще один шаг и перестроил элемент для класса Lync Click to Call после удаления номера телефона. Мои шаги могут быть грубыми, но эффективными.

    var ie = (document.all) ? true : false;

    function hideClass(objClass){
     //  This function will hide Elements by object Class
     //  Works with IE and Mozilla based browsers

    var elements = (ie) ? document.all : document.getElementsByTagName('*');
       for (i=0; i<elements.length; i++){
         //Loop through the elements until it finds one with the correct class name
         if (elements[i].className==objClass){
           //Extract the phone number from the element
           strPhone = getPhone(elements[i].innerHTML);
           //Replace the element with the phone number
           elements[i].outerHTML = "<SPAN class='baec5a81-e4d6-4674-97f3-e9220f0136c1'>"+strPhone+"</SPAN>"
         }
       }
     }
     function getPhone(thisStr){
        newStr = "";
        for (n=0; n<thisStr.length; n++){
            currChar = thisStr.substr(n,1)
            //Loop Through until it hits the first tag opening
            if (currChar != "<"){
                newStr+=currChar
            }else{
                break;
            }
        }
        return newStr;
     }

     function viewHTML(){
        alert(document.body.innerHTML)
     }

     function startTimer(){
        // 5 Seconds after the page loads, run the 
        window.setTimeout(function(){hideClass('baec5a81-e4d6-4674-97f3-e9220f0136c1');},5000);
     }
     window.onload=startTimer();
...