Как пометить номера телефонов?

Я хочу пометить номер телефона как вызываемую ссылку в документе HTML. Я прочитал подход к микроформатам, и я знаю, что схема tel: будет стандартной, но практически не реализована. >

Skype определяет, насколько я знаю, skype: и callto:, последние приобрели некоторую популярность. Я предполагаю, что другие компании имеют либо другие схемы, либо прыгают на поезд callto:.

Что было бы лучше всего использовать для разметки номера телефона, чтобы как можно больше людей с программным обеспечением VoIP могли просто щелкнуть ссылку, чтобы позвонить?

Бонусный вопрос: Кто-нибудь знает об осложнениях с номерами неотложной помощи, таких как 911 в США или 110 в Германии?

Приветствия,

Обновление: Microsoft NetMeeting принимает схемы callto: в WinXP. Этот вопрос предполагает, что Microsoft Office Communicator будет обрабатывать схемы tel:, но не callto:. Отлично, Редмонд!

Обновление 2: Спустя два с половиной года. Кажется, это сводится к тому, что вы хотите сделать с номером. В мобильном контексте tel: - это путь. Ориентирование настольных компьютеров на него, если вы считаете, что ваши пользователи больше людей Skype (callto:) или, скорее всего, будут иметь что-то вроде Google Voice (tel:). Мое личное мнение, когда в сомнении, используйте tel: (в соответствии с ответом @Sidnicious).

Обновление 3: Пользователь @rybo111 отметил, что Skype в Chrome тем временем прыгнул на победителя tel:. Я не могу проверить это, потому что нет машины с обоими руками, но если это правда, значит, у нас наконец победитель здесь:

                                        tel:

Ответ 1

Схема tel: использовалась в конце 1990-х годов и была документирована в начале 2000 года с RFC 2806 (который был устаревшим из-за более тщательного RFC 3966 в 2004 году) и продолжает совершенствоваться. Поддерживающий tel: на айфоне не было произвольного решения.

callto: хотя и поддерживается Skype, это не стандарт, и его следует избегать, если только он не предназначен специально для пользователей Skype.

Мне? Я просто начал бы включать правильно сформированные tel: URI на ваших страницах (без прослушивания пользовательского агента) и ждать, пока телефоны остального мира не догонят :).

Пример:

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

Ответ 2

Результаты моих тестов:

callto:

  • Браузер Nokia: ничего не происходит
  • Google Chrome: попросит запустить skype для вызова номера
  • Firefox: попросит выбрать программу для вызова номера
  • IE: просит запустить skype для вызова номера

тел:

  • Браузер Nokia: работающий
  • Google Chrome: ничего не происходит
  • Firefox: "Firefox не знает, как открыть этот URL"
  • IE: не удалось найти URL

Ответ 3

Лучше всего начать с 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: работает на вашем компьютере для подключения к skype из firefox, chrome

Ответ 4

Как и следовало ожидать, поддержка WebKit tel: распространяется и на мобильный браузер Android - FYI

Ответ 5

Я держу этот ответ за "историческую" цель, но больше не рекомендую. См. Ответ @Sidnicious 'выше и мое обновление 2.

Так как это выглядит как ничья между callto и парнями, я хочу бросить возможное решение в надежде, что ваши комментарии вернут меня на пути света; -)

Использование 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:?

Ответ 7

RFC3966 определяет стандартный URI IETF для телефонных номеров, то есть URI 'tel:'. Это стандарт. Там нет аналогичного стандарта, который указывает "callto:", что конкретное соглашение для Skype на платформах, где позволяет регистрировать обработчик URI для его поддержки.

Ответ 8

это сработало для меня:

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 )
    );
}

Ответ 9

Я использовал tel: для моего проекта.

Он работал в Chrome, Firefox, IE9 & 8, Chrome mobile и мобильном браузере на моем смартфоне Sony Ericsson.

Но callto: не работает в мобильных браузерах.

Ответ 10

Я бы использовал 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, поддерживают протокол tel:. Для остальных мы заменим ссылку на протокол callto:, чтобы иметь доступ к Skype, если он доступен.

Чтобы подавить страницы ошибок для неподдерживаемого протокола (ов), ссылка предназначена для нового скрытого iframe.

К сожалению, не представляется возможным проверить, правильно ли загружен URL-адрес в iframe. Кажется, что никаких ошибок не происходит.

Ответ 11

Так как callto: по умолчанию поддерживается skype (настроен в настройках Skype), а другие также поддерживают его, я бы рекомендовал использовать callto:, а не skype:.

Ответ 12

Хотя Apple рекомендует tel: в своих документах для Mobile Safari, в настоящее время (iOS 4.3), он принимает callto: точно так же. Поэтому я рекомендую использовать callto: на общем веб-сайте, поскольку он работает как с Skype, так и с iPhone, и я ожидаю, что он будет работать и на телефонах Android.

Обновление (июнь 2013 г.)

Это по-прежнему зависит от того, что вы хотите предложить своей веб-странице. На моих сайтах я предоставляю ссылки tel: и callto: (последний помечен как для Skype), поскольку настольные браузеры на Mac не делают ничего с tel: ссылками, в то время как мобильный Android ничего не делает с помощью callto: ссылки. Даже Google Chrome с плагином Google Talk не отвечает на ссылки tel:. Тем не менее, я предпочитаю предлагать обе ссылки на рабочем столе, если кто-то столкнулся с проблемой получения ссылок tel: для работы на своем компьютере.

Если дизайн сайта продиктовал, что я предоставляю только одну ссылку, я бы использовал ссылку tel:, которую я бы попытался изменить на callto: на настольных браузерах.

Ответ 13

Используя jQuery, замените все номера телефонов США на странице соответствующими схемами callto: или 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.

Ответ 14

Я использую обычную разметку <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;
    });
}