如何在网站上添加一个可点击的电话号码,但在不支持触控的网站浏览时隐藏链接。
我可以使用 Modernizr 来设置它,但是我不知道如何做。
<a href="tel:1300723579"><p><img src="assets/images/bt_calltoaction.gif" alt="View Projects" width="306" height="60"></p></a>
感谢TattyFromMelbourne的帖子,我现在使用了一个相当简单的方法:
我的按钮id="call"将根据他的"probablyphone"测试函数进行电话呼叫,但无论如何都会滚动到联系信息部分,使按钮具有工作用途。
我还用空函数替换了警报,以删除弹出窗口。
<a id="call" href="#contact">PHONE US</a>
$("#call").on('click', function() {
var probablyPhone = ((/iphone|android|ie|blackberry|fennec/).test(navigator.userAgent.toLowerCase()) && 'ontouchstart' in document.documentElement);
var link = "callto:15555555555";
if ( !probablyPhone ) {
window.alert = function() {};}
else{window.location.href = link;}
});
</script>
我的方法类似于上面的另一种方法; 我考虑了几个因素:
tel:
链接; 在桌面上,Chrome的行为最多只是在单击时不做任何事情。 最好的情况下,您可以使用Google Voice拨打电话。tel:
链接,则应对所有tel:
链接负责并在浏览器中禁用自动检测。记住所有这些,我建议首先向您的<head>
添加一个meta
标签:
<meta name="format-detection" content="telephone=no"/>
接下来,定义一个JavaScript函数,解析UserAgent并返回true
,当且仅当我们认为浏览器在链接被点击时不会将我们带到错误页面:
function hasTelSupport()
{
return /Chrome\/|Mobile( Safari)?\/|Opera M(in|ob)i\/|w(eb)?OSBrowser\/|Mobile\;|Tablet\;/.test(navigator.userAgent);
}
onclick
属性中调用该函数:<a href="tel:+18005551212" onclick="return hasTelSupport();">Call Me</a>
tel:
链接使用国际格式,即第一个字符应为加号+
和国家代码。@media(max-width:640px){
.your-calling-link{
display:none;
}
}
或者,如果你想显示链接但只禁用点击功能,请使用jQuery函数:
screen.width
或者
screen.innerWidth
并使用以下方法禁用链接的点击功能
$('.your-link').off(click);
我觉得我可以在这个有点冗长的讨论中发表我的意见。
基本上,我使用onClick事件(在链接上)来执行JavaScript并返回一个布尔值true或false。如果返回值为true,即某些检测设备是否为手机的变量或函数返回true,则浏览器会打开href URL。如果返回值是false,则href URL实际上不起作用。(这是HTML5之前的标准HTML行为。)
这就是我的意思:
<html>
<head>
<title>tel markup example</title>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script> <!-- Does not really matter what version of jQuery you use -->
<script>
var probablyPhone = ((/iphone|android|ie|blackberry|fennec/).test(navigator.userAgent.toLowerCase()) && 'ontouchstart' in document.documentElement);
function initialize() {
if ( !probablyPhone ) {
alert ("Your device is probably not a phone");
( function( $ ) {
$( '.call' ).css ( "text-decoration", "none" );
$( '.call' ).css ( "color", "black" );
$( '.call' ).css ( "cursor", "default" );
} )( jQuery );
}
}
</script>
</head>
<body onLoad="initialize();">
Please ring (some fictitious number in Australia): <a href="tel://+61391112222" class="call" onClick="return probablyPhone;">+61 3 9111 2222</a>
</body>
</html>
为了完成这篇文章/回答,感谢墨尔本的朋友rgb在这个stackoverflow帖子中编写了简洁的JavaScript代码,用于检测电话(基于用户代理和ontouchstart事件)。
<div class="mobile-desktop"><p>123-456-7890</p></div>
<div class="mobile-mobile"><a href="tel:123-456-7890">123-456-7890</a></div>
在你的 CSS 中设置移动端断点。这部分真的是由你决定的。假设:
@media only screen (min-width: 768px){
.mobile-mobile {
display:none;
}
}
@media only screen (max-width: 767px){
.mobile-desktop{
display:none;
}
}
将此输入自定义CSS中,然后就可以了:
a.tel { color: #FFFFFF; cursor: default; /* no hand pointer */ }
根据需要更改你的颜色。
干杯!
pointer-events:none
JavaScript 代码如下:
var a = document.getElementById("phone-number");
if (Platform.isMobile()) // my own mobile detection function
a.href = "tel:+1.212.555.1212";
else
$(a).css( "pointer-events", "none" );
不要将屏幕尺寸作为要求。
您可以使用CSS媒体查询,例如:
@media (pointer: fine) { /* this is for devices using a mouse, maybe a pen */
a[href^="tel:"] { /* select only "tel:" links */
pointer-events: none; /* avoid clicks on this element */
}
}
@media (pointer: coarse) { /* this works for mobile phones */
}
更多信息:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@media/pointer
这种方法可以在不添加任何CSS的情况下工作。
尝试将a
标签替换为其他东西,比如span
标签,但只针对移动浏览器。好处是您不需要使用CSS来掩盖此链接并防止默认操作,同时仍将其保留为链接。它将不再是a
,因此您不必担心。
我创建了一个示例here。加粗的电话就是这样工作的,查看下面的代码。
我从一个回答者那里获取了一段代码,用于确定浏览器是否为移动设备。您必须使用class="tel"
标记这些链接,或找到一种确定href
中是否有"tel:"的方法。还需要使用JQuery。
// define if browser is mobile, usually I use Anthony's Hand mobile detection library, but here is simple detection for clarity
var probablyPhone = ((/iphone|android|ie|blackberry|fennec/).test(navigator.userAgent.toLowerCase()) && 'ontouchstart' in document.documentElement);
if ( !probablyPhone ) {
// find all the A with "tel:" in it, by class name
$('a.tel').each(function(){
var span = document.createElement('span');
// SPAN inherits properties of A, you can also add STYLE or TITLE or whatever
span.innerHTML = this.innerHTML;
span.className = this.className;
// replace A with SPAN
this.parentNode.insertBefore(span, this);
this.parentNode.removeChild(this);
});
}
<a href="tel:111-222-3333"">111-222-3333</a>
。我的解决方案非常简单:function setPhoneLink() {
if (screen.width > 640) {
$("a[href^='tel:']").each(function(){
$(this).replaceWith($(this).text());
});
}
}
设备宽度:移动 <640;平板 >=768 且 <1024;桌面 >=1024。 来源: http://javascriptkit.com/dhtmltutors/cssmediaqueries2.shtml
tel:
的支持并不取决于屏幕大小、触摸支持、移动设备还是桌面设备等因素。你应该做最简单的事情,始终显示tel:
链接。使用title
解决方案(最佳答案)可以提供一些上下文和/或显示实际号码,这是最清晰的解决方案,而无需检测。 - toastal