禁用 Lync 点击呼叫在网页中检测号码

15

有没有办法阻止Microsoft Lync在Internet Explorer中检测网页中的电话号码,并添加其“点击拨号”图标?

显然,客户端可以在Internet Explorer中禁用此功能,但我希望为所有访问特定网站的人禁用此功能,因为它与网站使用的嵌入式字体不兼容。

要为Skype执行此操作,我会将以下元标记添加到我的网页头中:

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

谢谢,

Peter

5个回答

16
我找到了几个选项,但是没有一个像在页面中添加META标签那样简单或干净(微软应该给我们提供此选项)。
选项一:在您的电话号码中插入标记
例如,在电话号码的中间添加一个空白的SPAN就足以使Lync无法检测到。这是一种高度手动的选项,因为它要求您编辑页面上的每个电话号码。但是,它可以方便地禁用页面上的一个或两个号码,同时允许检测到其他任何号码。
<p>For help, please call 1-<span></span>800-555-1234.</p>

选项2:脚本去除额外的标记

Lync似乎以一种非常可预测的方式格式化电话号码。它使用一个(据我所知)一致的类名将标签包装在数字周围,然后附加一个包含拨号图标的锚点。

<!-- 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,您可以使用自己的客户端脚本来针对它进行隐藏或其他操作。 隐藏所有Lync图标的jQuery方法可能如下所示:

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

更新!方案2a:通过样式去除额外的标记

使用与上面脚本示例相同的技术,您可以使用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兼容)。这对我来说是最好的两全其美的选择:与用户的电话应用程序兼容,而不会破坏您的标记和布局。

在微软提出META标签解决这些问题之前,我们选择了第三种方案。


更新:已经整合了来自 @marsman57 的建议,以改进 CSS 选项 #2


我发现选项1和3最有效。谢谢! - Peter

4

我已经对选项#2进行了修改建议,但在获得批准之前,我会将此放在这里。用户2200197遇到问题的原因是需要指定!important标签,因为锚点标签指定了一个显示值,否则它会覆盖掉!important标签。

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

2

我发现 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
我找到了一个有用的片段,可以移除Lync呼叫标志这里。它将电话号码中的连字符替换为一个外观类似的字符,这样它就不再被识别为电话号码。

1
我无法使选项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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接