Подтвердить что ты не робот

Используйте jQuery для определения того, может ли устройство совершать телефонные звонки (поддерживает протокол "tel://" )

На моем веб-сайте у меня есть несколько ссылок:

<a href="tel://+12181112222" class="call">218.111.2222</a>

Я хочу использовать jQuery (или другой метод), чтобы определить, поддерживает ли устройство вызов/использование протокола tel://. Существует ли такой метод в мире?

Я хочу использовать какой-либо метод для включения или отключения ссылок, потому что при нажатии на рабочем столе мы приходим на страницу типа "Firefox не знает, как открыть этот адрес, потому что протокол (tel) не связан с любая программа.

В настоящее время я обнюхиваю пользовательский агент и обнаруживаю, является ли это мобильным устройством. Но есть ли лучший/точный способ? Что-то вроде jQuery $.support.xx?

if ( (/iPhone|iPod|iPad|Android|BlackBerry/).test(navigator.userAgent) != true ){
    $(".call").attr("href", "#");
}
4b9b3361

Ответ 1

Я не уверен в Android или BlackBerry, но iOS автоматически забирает телефонные номера и обертывает их так: <a href="tel:xxx">xxx</a>... поэтому у вас может быть скрытый <div> где-то, содержащий номер телефона, например, 1 -800-555-5555, то при загрузке страницы сделайте следующее:

var isTelephone = $("a[href*='tel:']").length > 0;

Это может быть или не быть переносимым на другие платформы, вам придется попробовать его.

Ответ 2

Я использую следующее, чтобы обнаружить его PROBABLY телефон, прежде чем активировать элемент не ссылки, который находится в телефонной связи:

var probablyPhone = (
    (/iphone|android|ie|blackberry|fennec/).test
     (navigator.userAgent.toLowerCase())
     && 'ontouchstart' in document.documentElement
  );

Я исключаю ipod | ipad, потому что знаю, что они не телефоны

Ключевым моментом здесь является PROBABLY Разумеется, это вернет некоторые устройства для планшетов, но это достаточно для моих целей на нетелефонном сенсорном устройстве, поскольку связь просто потерпит неудачу в любом случае - я в основном просто хочу исключить рабочий стол, следовательно, обнаружение сенсорного события. Я также предполагаю, что проверка ширины устройства также сузила бы ее, но в конечном счете нет надежного способа обнаружить мобильное устройство, способное к телефонным вызовам, которые я нашел.

Ответ 3

Можно было бы найти первый экземпляр href с tel://в нем и отправить вызов ajax. Если он был успешным, он должен иметь readyState из 1, поэтому ничего не делать. В случае сбоя найдите все hrefs с помощью tel://и возьмите внутренний html и замените тег.

Это скорее гипотеза и непроверенная.

Другая мысль заключается в том, что большинство браузеров имеют пользовательскую поддержку для форматированных номеров телефона. Если вы поместили номер телефона, вам не нужно будет создавать тег, как это должно быть сделано автоматически.

Ответ 4

Некоторое ограниченное решение может быть способом обнаружения некоторых чистых телефонов. Но не все возможно:

(function(a) {
	window.isPhone = /\bi?Phone\b|(?=.*\bAndroid\b)(?=.*\bMobile\b)|(?=.*\bAndroid\b)(?=.*\bSD4930UR\b)/i.test(a);
})(navigator.userAgent || navigator.vendor || window.opera);

console.info('This device %s make phone calls', window.isPhone ? 'is originally intended to' : 'probably can\'t' );