電話番号をマークアップする方法は?


471

HTML文書で電話番号を呼び出し可能なリンクとしてマークアップしたい。私はマイクロフォーマットのアプローチを読みましたが、このtel:スキームは標準的なものですが、文字通りどこにも実装されていません。

Skypeは、私の知る限り、そして後者はある程度の人気を得ているskype:と定義していますcallto:。私は、他の企業が他の計画を持っているか、callto:電車に乗っていると思います。

電話番号をマークアップして、VoIPソフトウェアを使用するできるだけ多くの人がリンクをクリックするだけで電話を受けることができるようにするためのベストプラクティスは何でしょうか。

おまけの質問:米国の911やドイツの110などの緊急電話番号の合併症について誰か知っていますか?

乾杯、

更新: Microsoft NetMeetingはcallto:、WinXPでスキームを採用しています。この質問は、Microsoft Office Communicatorはtel:スキームを処理するがスキームは処理しないことを示唆していcallto:ます。すばらしい、レドモンド!

更新2: 2年半後の現在。数字でやりたいことまで煮詰めているようです。モバイルのコンテキストでtel:は、進むべき道です。デスクトップをターゲットにするかどうかは、Skypeユーザーが多い(callto:)か、Google Voice(tel:)などがインストールされている可能性が高いと思われる場合は、あなた次第です。私の個人的な意見は、疑わしい場合はtel:(@Sidnicious 'の回答に沿って)使用することです。

更新3:ユーザー@ rybo111によると、ChromeのSkypeはその間、急成長していtel:ます。手元に両方のマシンがないため、これを確認することはできません。tel:


1
残念ながら違います。それはあなたのプロバイダー(VoiP、携帯電話のコンプなど)が何をするかに要約されるようです。これは、800の番号にも課金される可能性があります。
Boldewyn、2011

1
ChromeでGoogle Voiceを使用していtel:ますが、URIを認識しません。私はcallto:携帯電話のブラウザーがとにかく番号を自動検出するべきだという理論に基づいて、電話番号の表示に固執しています。
Old Pro、

5
タイトルにもかかわらず、この質問は、どのようにマークアップするかではなく、「電話番号にどのURLスキームを使用する必要があるか」ということです。
Raedwald 2013年

1
@Boldewyn SkypeでChromeを使用するとプロンプトが表示されるtel:ため、Skypeの使用に関する最後のコメントを削除する必要がありますcallto:か?
rybo111 2014

1
質問の更新を対応する回答に編集してみてください。このように、それは一種の混乱です。
idmean

回答:


495

このtel:スキームは1990年代後半使用され、 2000年初頭にRFC 2806で文書化され(2004年に完全なRFC 3966によって廃止されました)、引き続き改善されています。tel:iPhoneでのサポートは恣意的な決定ではありませんでした。

callto:は、Skypeでサポートされていますが、標準はないため、 Skypeユーザーを特に対象とする場合を除いて、使用しないでください。

私?tel:(ユーザーエージェントを盗聴することなく)ページに適切な形式のURI を含め始め、世界中の他の電話が追いつくのを待ちます:)。

<a href="tel:+18475555555">1-847-555-5555</a>


詳細な回答ありがとうございます!私も質問したので、このアプローチを採用したくなりました。標準を使用して、悪いアプリ/ツールを使用していることを不平を言う人に伝えます。難しくなりますが、これがあなたのクライアントなら、あなたは正しいと思います。それでもSkypeユーザーを考慮する必要がある場合は、JavaScriptソリューションを逆に使用します。
Boldewyn 2009

1
それは2014年で、Tel:Skypeで動作します。ただし、Skype Echo /サウンドテストサービスへの通話を開始する場合、リンクはmsdn.microsoft
OzBob 2015

4
誰かがhref="tel://1-555-555-5555"フォーマットを試しましたか?Tutsplusからの人は、それがお勧めcode.tutsplus.com/tutorials/...
エイドリアンはして

2
私のtel:タグの使用経験では、Skypeは、番号を適切に解析するために、番号に+が付いた国コード(たとえば、英国の番号の場合は「+44」)を要求します。それ以外の場合は、Skypeを開くだけですが、ダイヤルを試みません。
ShaunUK

3
例は<a href="tel:+18475555555">ではありませんか?最初の1.の前の+に注意してください。
StéphaneJun

73

私のテスト結果:

に呼び出します:

  • Nokia Browser:何も起こりません
  • Google Chrome:番号を呼び出すためにスカイプを実行するように求めます
  • Firefox:番号を呼び出すプログラムを選択するように求めます
  • IE:番号を呼び出すためにスカイプを実行するように求めます

tel:

  • Nokia Browser:機能
  • Google Chrome:何も起こりません
  • Firefox:「FirefoxはこのURLを開く方法を知りません」
  • IE:URLが見つかりませんでした

2
これに追加すると、動作はAndroid 4.2.2(Nexus 4)上のGoogle Chromeと同じです。AndroidバージョンのSkypeをバックグラウンドで実行しても、callto:リンクは機能しません。つまり、その場でモバイルをターゲットにする場合は、callto:リンクを実際に使用することはできません。
2013年


ChromeとFirefoxの(多分IE同様)では、あなたはあなたのためのウェブサービスに登録することができますtel:との接頭registerProtocolHandlerを
ロスロジャース

+ Chromeで機能する+ countrycode電話番号を使用する必要があります。電話:リンクは、クロムなしのスカイプで動作しないようです+ +
Stas Svishov 2014年

OSXとChromeで更新:Facetimeを起動するよう求められます。
ジュール

45

最善の策は、すべての携帯電話で機能するtel:から始めることです。

次に、このコードを入力します。このコードは、デスクトップ上で、リンクがクリックされたときにのみ実行されます。

私はhttp://detectmobilebrowsers.com/を使用してモバイルブラウザを検出しています。好きな方法を使用できます

if (!jQuery.browser.mobile) {
    jQuery('body').on('click', 'a[href^="tel:"]', function() {
            jQuery(this).attr('href', 
                jQuery(this).attr('href').replace(/^tel:/, 'callto:'));
    });
}

つまり、基本的にすべての拠点をカバーします。

tel:すべての電話で機能し、番号のダイヤラーを開きます

callto:コンピューターでFirefox、ChromeからSkypeに接続します


はい、これ-callto:はAndroidではまったく機能しません(Muratの回答に関する私のコメントを参照してください)。また、tel:は実際にはデスクトップでは機能しません。本当に残念です。
2013年

1
うーん、残念ながら、クイックjsfiddleではこれも機能しないようです... jsfiddle.net/tchalvakspam/gVZYt/3
Kzqai

Mac 10.8でSeamonkey 2.20を<body <?php body_class(); ?>>使用すると、wordpressテーマのheader.phpファイルのコードの下に配置されます。
om01 2013

callto:MacのChromeでは機能せず、バージョンは最新
Ujjwal

残念ながら、これはJQuery 1.9で
廃止されました

21

ご想像のとおり、WebKitのサポートはtel:Androidモバイルブラウザーにも拡張されます-FYI


15
コメントとしては良かったのですが、とにかく知って結構です。
o0 '。

10

私はこの回答を「歴史的な」目的で保持しますが、これ以上お勧めしません。上記の@Sidnicious 'の回答と私のアップデート2を参照してください。

calltoとtelのあいだの引き分けのように見えるので、あなたのコメントが光の道に私を引き戻すことを期待して、可能な解決策を投入したいと思います;-)

callto:ほとんどのデスクトップクライアントがそれを処理するため、を使用します。

<a href="callto:0123456789">call me</a>

次に、クライアントがiPhoneの場合は、リンクを置き換えます。

window.onload = function () {
  if (navigator.userAgent.match (/iPhone/i)) {
    var a = document.getElementsByTagName ("a");
    for (var i = 0; i < a.length; i++) {
      if (a[i].getAttribute ('href').search (/callto:/i) === 0) {
        a[i].setAttribute ('href', a[i].getAttribute ('href').replace (/^callto:/, "tel:"));
      }
    }
  }
};

このソリューションに対する異論はありますか?私はできればから始めるべきtel:ですか?


iPhoneがcalltoスキームもサポートしているのかもしれませんが、Appleはtelを好んでいるので、それはドキュメントで言及されているものです。
Jan Aagaard、2009

5
私の答えを見てください。callto:独自のURIスキームなので、私はそこから始めません。
s4y 09/09/23

callto:MacのChromeでは機能せず、バージョンは最新です。
Ujjwal

それは私を驚かせません。答えが出された2009年の状況は根本的に異なりました。また、callto:Skypeのようなスキームに登録するサードパーティのプログラムも必要です。Chrome自体は何をすべきかわからない。
Boldewyn、2015

9

Mobile Safari(iPhoneおよびiPod Touch)はこのtel:スキームを使用します。

iPhoneのWebページから電話番号をダイヤルするにはどうすればよいですか?


2
したがって、メインのターゲットユーザーがiPhoneまたはiPod Tough(および他のモバイルデバイスかもしれませんが...)の場合、telを使用する必要があります。メインユーザーが通常のWebクライアントの場合(IE、Firefoxなど) Skypeや他のVoIPソフトウェアを使用する場合、callto:が最適だと思います。
畏敬の念を示す

3

RFC3966は、電話番号のIETF標準URI、つまり「tel:」URIを定義しています。それが標準です。「callto:」を指定する同様の標準はありません。これは、がURIハンドラーを登録してサポートするプラットフォームでのSkypeの特定の規則です。


そう、Sidniciousが言ったことです。
Boldewyn 2013年

3

これは私のために働きました:

1.標準に準拠したリンクを作成します。

        <a href="tel:1500100900">

2. Skypeの場合、モバイルブラウザーが検出されない場合は交換します。

$("a.phone")
    .each(function()
{ 
  this.href = this.href.replace(/^tel/, 
     "callto");
});

クラスを介して置き換えるリンクを選択する方が効率的です。もちろん、それは.phoneクラスを持つアンカーでのみ機能します。

私はそれを機能さif( !isMobile() ) { ...せて、デスクトップブラウザを検出したときにのみトリガーされるようにしました。しかし、これはおそらく時代遅れです...

function isMobile() {
    return (
        ( navigator.userAgent.indexOf( "iPhone" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "iPod" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "iPad" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "Android" ) > -1 ) ||
        ( navigator.userAgent.indexOf( "webOS" ) > -1 )
    );
}

モバイルブラウザを検出する「適切な」方法は、大文字と小文字を区別しない文字列「mobile」をチェックすることです。
Kevin Cox 2013年

2

tel:は自分のプロジェクトに使用しました。

Chrome、Firefox、IE9&8、Chromeモバイル、Sony Ericssonスマートフォンのモバイルブラウザーで動作しました。

しかしcallto:、モバイルブラウザでは機能しませんでした。


2

私はtel:(推奨通り)使用します。しかし、より良いフォールバック/エラーページを表示しないようにするには、次のようなものを使用します(jqueryを使用)。

// enhance tel-links
$("a[href^='tel:']").each(function() {
    var target = "call-" + this.href.replace(/[^a-z0-9]*/gi, "");
    var link = this;

    // load in iframe to supress potential errors when protocol is not available
    $("body").append("<iframe name=\"" + target + "\" style=\"display: none\"></iframe>");
    link.target = target;

    // replace tel with callto on desktop browsers for skype fallback
    if (!navigator.userAgent.match(/(mobile)/gi)) {
        link.href = link.href.replace(/^tel:/, "callto:");
    }
});

前提は、userAgent-stringにモバイルスタンプがあるモバイルブラウザーがtel:プロトコルをサポートしていることです。残りについては、リンクをcallto:プロトコルに、利用可能な場合はSkypeにフォールバックします。

サポートされていないプロトコルのエラーページを抑制するために、リンクは新しい非表示のiframeをターゲットにしています。

残念ながら、URLがiframeに正常にロードされているかどうかを確認することはできないようです。エラーイベントが発生しないようです。


非表示のiframeをうまく使用できます!
Boldewyn 2013

1

以来callto:(Skypeの設定で設定)スカイプでサポートされているデフォルトのあたりにあり、そして他の人もそれをサポートしていない、私が使用することをお勧めしますcallto:ではなくskype:


3
ここで同意します。しかし、すべてまとめると、tel:vs callto:に要約されるようで、それは簡単なことではありません。
Boldewyn 2009

1

Apple tel:は彼らのドキュメントでMobile Safariを推奨していますが、現在(iOS 4.3)、callto:まったく同じものを受け入れます。だから私はcallto:、SkypeとiPhoneの両方で機能する一般的なWebサイトでのます。また、Androidフォンでも機能することを期待しています。

更新(2013年6月)

これは、Webページに何を提供するかを決定する問題です。私のWebサイトでは、Macのデスクトップブラウザーはリンクに対して何もせず、モバイルAndroidはリンクに対して何もしないので、両方tel:callto:リンク(後者はSkype向けとラベル付けされています)を提供tel:callto:ます。Googleトークプラグインを備えたGoogle Chromeでもtel:リンクに応答しません。それでも、誰かがトラブルに巻き込まれた場合に備えて、デスクトップに両方のリンクを提供することを好みますtel:自分のコンピューターでリンクを機能させるます。

サイトの設計でリンクを1つだけ指定するように指示されている場合は、デスクトップブラウザーでtel:変更しようとするリンクを使用しcallto:ます。


1
Android "Ice Cream Sandwich"の最新のオープンソースビルドのストックブラウザは、まだサポートしているようtel:です。callto:リンクをクリックすると、「Webページは利用できません」という結果になります
rymo

0

jQueryを使用して、ページ上のすべての米国の電話番号を適切なcallto:or tel:スキームに置き換えます。

// create a hidden iframe to receive failed schemes
$('body').append('<iframe name="blackhole" style="display:none"></iframe>');

// decide which scheme to use
var scheme = (navigator.userAgent.match(/mobile/gi) ? 'tel:' : 'callto:');

// replace all on the page
$('article').each(function (i, article) {
    findAndReplaceDOMText(article, {
        find:/\b(\d\d\d-\d\d\d-\d\d\d\d)\b/g,
        replace:function (portion) {
            var a = document.createElement('a');
            a.className = 'telephone';
            a.href = scheme + portion.text.replace(/\D/g, '');
            a.textContent = portion.text;
            a.target = 'blackhole';
            return a;
        }
    });
});

アイデアをありがとう@jonas_jonas。優れたfindAndReplaceDOMText関数が必要です。


1
ユーザーエージェント文字列の分析は悪い習慣と見なされているため、このソリューションは理想的ではありません。telURI をサポートしているが、自分自身をモバイルとして報告しないデバイスを考えてみます。
Arturo TorresSánchez2015年

-1

私は通常の<a href="tel:+123456">12 34 56</a>マークアップを使用し、これらのリンクをデスクトップユーザーがクリックできないようにします。pointer-events: none;

a[href^="tel:"] {
    text-decoration: none;
}
.no-touch a[href^="tel:"] {
    pointer-events: none;
    cursor: text;
}

ポインターイベントをサポートしないブラウザー(IE <11)の場合、JavaScriptでクリックを防ぐことができます(例は、ModernizrとjQueryに依存しています)。

if(!Modernizr.touch) {
    $(document).on('click', '[href^="tel:"]', function(e) {
        e.preventDefault();
        return false;
    });
}

1
タッチイベントのサポートでModernizr.touchあるwhich を使用してサポートを推測することtel:は信頼できません。簡単な例外ケース:iPad、Windowsタブレットなど
zachleat 2015年

Windowsデスクトップで実行されているChromeでさえ、タッチデバイスとして報告されます。
Arturo TorresSánchez2015年

一部のデスクトップクラスのマシンはtel:urlをサポートしています。Mac固有の例では、MacのFaceTimeが標準であり、tel:で動作します。ハンドオフ/継続性を備えたユーザーのiPhoneを使用する限り、ポインターイベントを使用することで、デスクトップをターゲットに設定することはもう賢明ではありません。 。
OxC0FFEE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.