web-dev-qa-db-ja.com

Lync Click toCallを無効にしてWebページの番号を検出する

Microsoft LyncがWebページで電話番号を検出し、Internet Explorerでその電話番号にClick-to-Callアイコンを追加するのを防ぐ方法はありますか?

明らかに、クライアントはInternet Explorerでこの機能を無効にできますが、特定のWebサイトにアクセスするすべての人に対してこれを無効にします。これは、Webサイトで使用されている埋め込みフォントでうまく機能しないためです。

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

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

ありがとう、

ピーター

15
Peter

いくつかのオプションを見つけましたが、ページに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を選択しました。


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

16
CBono

オプション#2の編集を提案しましたが、承認されるまで、ここにドロップします。 user2200197の問題の理由は、アンカータグが表示値を指定しているため、!importantタグを指定する必要があるためです。

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

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が番号を検出できなくなります。

2
mhu

オプション2を機能させることができませんでした。これは、ページが読み込まれた後にアドオンがトリガーされるためだと思います。それで私は考えました...ページの読み込みから5秒後にこれをトリガーした場合は、要素を非表示にします。この理論は成功したことが証明されましたが、電話番号も隠されていました。

さらに一歩進んで、電話番号を削除した後、Lync Click toCallクラスの要素を再構築しました。私の手順は大雑把かもしれませんが、効果的です。

    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();
1
user2200197

Lyncコールサインを削除するための便利なスニペットを見つけました ここ 。電話番号のハイフンが似たような文字に置き換えられ、電話番号として識別されなくなります。

1
chetan92