15

Microsoft Lync が Web ページで電話番号を検出し、そのクリック ツー コール アイコンを Internet Explorer でその電話番号に追加するのを止める方法はありますか?

明らかに、クライアントは Internet Explorer でこの機能を無効にできますが、特定の Web サイトにアクセスするすべてのユーザーに対してこれを無効にしたいと考えています。

Skype でこれを行うには、Web ページのヘッダーに次のメタ タグを追加します。

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

ありがとう、

ピーター

4

5 に答える 5

16

いくつかのオプションを見つけましたが、ページに META タグを追加するほど単純でクリーンなものはありません (Microsoft は絶対にオプションとして提供する必要があります)。

オプション #1: 電話番号にマークアップを挿入する

電話番号の途中に空白のようなものを追加するSPANだけで、Lync の検出を無効にできます。これは、ページ上のすべての電話番号を編集する必要があるため、非常に手動のオプションです。ただし、ページ上の 1 つまたは 2 つの数字を無効にし、他の数字を検出できるようにする場合に便利です。

<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 を選択しました。


更新: CSS オプション #2 を改善するために@marsman57 からの提案を組み込みました

于 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 に答える