点击呼叫HTML

48

我想在我的网站上使用HTML5标签,以便在移动设备上查看时,当用户点击此链接时,可以拨打给定号码的电话。

<p>Book now, call <a href="tel:01234567890">01234 567 890</a></p>

当用户的手机不支持HTML5时,我应该怎么做才能隐藏这个链接?我已经使用过Modernizer,但似乎它无法检测到链接属性。http://www.tutorialspoint.com/html5/html5_modernizr.htm

有什么建议吗?这个按钮只会在移动设备上打开我的网站时出现,对于旧的移动设备,我希望隐藏这个链接。


1
这与HTML 5无关,应用程序和插件可以添加协议处理程序(如Skype),但没有简单的方法确定协议是否已处理。 - Adriano Repetti
我只想在移动浏览器不支持HTML5时隐藏那个链接。在上述Modernizer链接中它将无法检测到... - Umair Rana
4
浏览器是否知道 HTML 5 并不重要。浏览器是否新也并不重要。即使是非常老旧的(不支持 HTML 5)iPhone 上的 Safari 或桌面上的 IE8,也能够理解 callto: 或 tel: 协议处理程序。 基于 HTML5 的检查实际上相当无用。 - Adriano Repetti
1
你需要检查的是协议处理程序是否被支持,如果想要一个好的想法,请看一下这篇文章 - Adriano Repetti
浏览器是否支持HTML 5并不重要。浏览器是新的还是旧的也不重要。即使是在不支持HTML 5的非常老的iPhone Safari或桌面上的IE8中,也可以理解callto:或tel:协议处理程序。基于HTML5的检查相当无用。你确定吗?我认为这就是解决方案...我一直在想它是不是在HTML5中引入的。 - Umair Rana
是的,我是。HTML 5 增加了对自定义协议处理程序的注册/检查支持(迄今为止相当差),并通过 isProtocolHandlerRegistered() 函数检查现有支持。据我所知,至少在2007年,苹果已经添加了对 tel: (和其他移动协议处理程序)的支持。足够古老而没有 HTML 5 的支持?问题是桌面浏览器可能不理解它(据我所知,Skype 安装了一个 callto: 协议处理程序,但其他应用程序也可以理解 tel:)。 - Adriano Repetti
2个回答

78

简而言之 现代(2018年)应该怎么做?假设支持tel:,使用它并忘记其他任何东西。


tel: URI协议方案RFC5431(以及sms:, feed:, maps:, youtube:和其他一些协议方案)由协议处理程序来处理(就像mailto:http:一样)。

它们与HTML5规范无关(它自90年代就已经out there from 90s存在并在2k时首次记录在RFC2806中),所以您不能使用类似于modernizr这样的工具检查它们的支持。协议处理程序可以由应用程序安装(例如Skype安装了一个与tel:意义和行为相同的callto:协议处理程序,但这不是标准),由浏览器本身进行本地支持或由网站本身进行限制性安装。

HTML5新增了对安装自定义基于Web的协议处理程序(使用registerProtocolHandler()和相关函数)的支持,同时还通过isProtocolHandlerRegistered()函数简化了其支持的检查。
有一些简单的方法可以确定是否存在处理程序:“如何检测浏览器的协议处理程序?”。
总体而言,我的建议是:
  1. 如果您正在移动设备上运行,则可以安全地假定支持tel:(是的,对于非常老旧的设备来说这不是真实的,但我认为您可以忽略它们)。
  2. 如果JS未激活,则不执行任何操作。
  3. 如果您在桌面浏览器上运行,则可以使用链接帖子中的技术之一来确定是否支持。
  4. 如果不支持tel:,则将链接更改为使用callto:并重复描述3中的检查。
  5. 如果不支持tel:callto:(或者在桌面浏览器上无法检测到它们的支持),则只需用javascript:void(0)替换href中的URL,并在title 中放置电话号码(如果数字没有在文本跨度中重复)。在这里,HTML5微数据将不会帮助用户(只是搜索引擎)。请注意,Skype的新版本同时处理callto:tel:
请注意,至少在最新的Windows版本上,总是有一个虚假的注册协议处理程序称为App Picker(让您选择使用哪个应用程序打开未知文件的恼人窗口)。这可能会消失你的测试,所以如果你不想把Windows环境作为特殊情况来处理,你可以简化这个过程如下:
1. 如果你正在运行移动设备,则假定支持tel:。 2. 如果你正在桌面上,删除tel:或保留它(假设有很好的机会安装Skype)。

你能详细说明一下 <a href="maps:{{???}}"></a> 吗?或者请提供有关使用它的指南/文档的参考资料,谢谢。 - Cody
2
@Cody geo的完整规范在RFC5870中。即使geo:和maps:有不同的用途,它们大致具有相同的语法。可以在维基百科上快速了解介绍 - Adriano Repetti
2
仅为完整性起见,tel:URI方案是RFC3966 - Christian Hujer

2

请使用以下内容:

<a href="tel:XXX-XXX-XXXX">XXX-XXX-XXXX</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接