The tel: URI scheme(以及短信:还包括Feed :,maps :,youtube:和其他)由协议处理程序处理(如mailto:和http:are)。
它们与HTML5规范无关(AFAIK Apple在2007年左右引入了tel:支持,并且Android设备也很久以前支持它们),那么您无法使用toolsiz来检查他们的支持。协议处理程序可以由应用程序安装(例如,Skype安装一个callto:具有相同意义和行为的tel :)的协议处理程序,由浏览器本机支持,或由网站本身安装(有一些限制)。
添加的HTML5是支持安装自定义基于Web的协议处理程序(具有registerProtocolHandler()和相关功能),还可以通过isProtocolHandlerRegistered()函数简化支持。这是检查tel:是否支持的好方法。问题是这个API没有得到广泛的支持,但有很多解决方法(也就是here on SO)。一般我建议的是:
>如果您正在移动设备上运行,那么您可以放心地假设tel:被支持(是的,对于旧设备来说不是真的,但是IMO可以忽略它们)。
>如果JS不活动,那么什么都不做。
>如果您在桌面浏览器上运行,那么您可以使用isProtocolHandlerRegistered()来检测支持(如果不支持,则返回到替代方法)。
>如果tel:不支持,则更改链接以使用callto:并在3中重复检查desctibed。
>如果tel:和callto:不支持(或者 – 在桌面浏览器中 – 您无法检测到他们的支持),那么只需删除该链接替换href中的URL,使用javascript:void(0)和(如果数字不是重复在文本跨度)放置,电话号码。这里的HTML5微数据不会帮助用户(只是搜索引擎)。
请注意(至少在最新的Windows版本上)总是有一个假冒注册的协议处理程序,叫做App Picker(令人讨厌的窗口,让你选择你要打开一个未知文件的应用程序)。这将消除您的测试,因此如果您不想处理Windows环境作为特殊情况,您可以简化此过程:
>如果您正在移动设备上运行,那么假设tel:被支持。>如果您在桌面上运行,请使用callto:替换tel:。然后放电话或离开它(假设有好的机会安装Skype)。