【问题标题】:Disable Lync Click to Call detecting numbers in a web page禁用 Lync Click to Call 检测网页中的号码
【发布时间】:2011-10-07 09:31:05
【问题描述】:

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

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

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

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

谢谢,

彼得

【问题讨论】:

    标签: html internet-explorer lync


    【解决方案1】:

    我找到了一些选项,但没有一个比向页面添加 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 锚作为先发制人的打击

    有一个standardized way 来标记电话号码,以便与 VOIP/拨号程序兼容。它使用带有tel: 协议的标准A 锚。这具有双重效果,不仅可以禁用 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。


    更新:合并了 suggestion from @marsman57 以改进 CSS 选项 #2

    【讨论】:

    • 我发现选项 1 和 3 是最有效的。谢谢!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我发现 Lync 插件似乎使用了以下正则表达式(在 this blog 上):

      (\+?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})
      

      因此,使用 &amp;nbsp;&amp;dash; 应该会阻止 Lync 检测到这些数字。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-01
            • 2012-08-01
            • 2011-04-08
            • 1970-01-01
            • 2011-11-07
            • 1970-01-01
            相关资源
            最近更新 更多