15

有没有办法阻止 Microsoft Lync 检测网页中的电话号码,并将其单击呼叫图标添加到 Internet Explorer 中的该电话号码?

显然,客户端可以在 Internet Explorer 中禁用此功能,但是我想为所有访问特定网站的人禁用此功能,因为它不能很好地与网站上使用的嵌入字体配合使用。

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

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

谢谢,

彼得

4

5 回答 5

16

我找到了一些选项,但没有一个比向页面添加 META 标记更简单或干净(微软绝对应该给我们一个选项)。

选项 #1:将标记插入您的电话号码

在电话号码中间添加空格SPAN之类的内容足以摆脱 Lync 的检测。这是一个高度手动的选项,因为它要求您编辑页面上的每个电话号码。但它可以很方便地禁用页面上的一个或两个数字,同时允许检测到任何其他数字。

<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,您可以使用自己的客户端脚本定位它并将其隐藏或执行任何操作。隐藏所有 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 兼容)。这给我的印象是两全其美:与用户的电话应用程序兼容,而不用破坏你的标记和布局。


在 Microsoft 提出 META 标签来解决这些问题之前,我们选择了#3。


更新:合并了来自@marsman57的关于改进 CSS 选项 #2的建议

于 2012-02-24T16:33:33.897 回答
4

我已建议对选项 #2 进行编辑,但在获得批准之前,我会继续将其放在这里。user2200197 问题的原因是需要指定 !important 标签,因为锚标签指定了一个显示值,否则会覆盖它。

span.baec5a81-e4d6-4674-97f3-e9220f0136c1 > a {
   display: none !important;
}
于 2013-08-23T12:22:53.477 回答
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;or&dash;应该阻止 Lync 检测数字。

于 2013-03-11T13:36:15.053 回答
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();
于 2013-03-22T17:09:33.283 回答
1

我在这里找到了一个有用的片段来删除 Lync 呼号。它将电话号码中的连字符替换为外观相似的字符,并且不再被识别为电话号码。

于 2015-09-10T10:32:17.310 回答