特殊的链接:“tel”、“sms“、“mailto”

2,163 阅读2分钟

近来一同事找我寻求帮助,大致意思是调用href的 sms 会报错,因此特地查询了一些资料,对发送消息的特殊链接重新学习了一下。

SMS定义

SMS(Short Message Service)即短消息服务,说到SMS就不得不提一下 全球移动通信标准(GSM),SMS是GSM标准的一项重要网络技术。目前广泛使用在移动设备上,就是我们所熟知的短信、彩信。

在以前短信恋爱的时代(一个月短信费都得几十),我们总能把短信当做文章编辑,可不管你编辑多少,总会神奇的发现,一条短信被分割成多条发送了。其实这可不是运营商决定的,而是由于每条短信最多只能传输140个八进制字符,即70个中文汉字。

WEB中的SMS

我们在移动开发中应该会偶尔碰到调用移动设备拨号系统的写法:

<a href="tel: 14035550185">拨号</a>

发送短信 tel 一样,基本的链接格式如下:

<a href="sms:">Send a SMS</a>

rfc5724 方案中定义了短消息的格式 sms-uri = scheme ":" sms-hier-part [ "?" sms-fields ] ,其中 scheme = "sms",sms-hier-part即手机号码,多个手机号可以用 "," 分隔,sms-fields 即要发送的消息内容,手机号与内容之间用 "?" 分隔,短消息内容格式为 body = hello%20world! 。这里要注意的是body 要求只能有一个,"=" 后的实体内容必须是encode编码后的内容。按照规范,我们在移动设备中,想要调用短消息系统时,正确的做法是:

<a href="sms: +14035550185?body=I%27m%20interested%20in%20your%20product.%20Please%20contact%20me.">Send a SMS message</a>

虽然 rfc5724 方案中是这样规定了格式,但是由于移动设备系统或硬件的差异,对于上述格式的支持程度也存在一定的差异。对于上述a标签进行实测,在Android手机测试结果如下,但是同样在iphone8的IOS14上却发现手机号与内容都在接收者一栏出现。

Vivo.jpg

对于兼容性方案,还收集到一些前人的努力:

兼容性.png

总的来说,目前移动设备对于sms的支持度还是有待提升。我们在调用sms时,还是能简单为宜:

<a href="sms: +14035550185">Send a SMS message</a>

写在最后,顺便提一下有关超链接邮箱 mailto 的使用方法:

<a href="mailto: 01117464@wisedu.com">Send an e-mail</a>