SMS协议使用
在浏览器中,可以使用SMS协议打开短信应用,并将手机号码、短信内容等信息传入。
SMS协议启动测试
SMS协议分
sms:和sms://两种,前者跟mailto:类似,后者跟接近URI的规范。下面测试只测试前者。
测试代码
<a href="sms:">无参</a>
<a href="sms:18610510078">1个号码</a>
<a href="sms:+8618610510078">1个号码(+86)</a>
<a href="sms:18610510078,18610510079">2个号码</a>
<a href="sms:+8618610510078,+8618610510079">2个号码(+86)</a>
<a href="sms:?body=Hello,%20world">内容?body</a>
<a href="sms:;body=Hello,%20world">内容;body</a>
<a href="sms:&body=Hello,%20world">内容&body</a>
<a href="sms:18610510078?body=Hello%20World">号码?内容</a>
<a href="sms:+8618610510078?body=Hello%20World">号码(+86)?内容</a>
<a href="sms:18610510078;body=Hello%20World">号码;内容</a>
<a href="sms:+8618610510078;body=Hello%20World">号码(+86);内容</a>
<a href="sms:18610510078&body=Hello%20World">号码&内容</a>
<a href="sms:+8618610510078&body=Hello%20World">号码(+86)&内容</a>测试记录
iOS使用Safari浏览器,Android使用系统浏览器。
| 参数 | 无参 | 1个号码 | 2个号码 | 内容(?) | 内容(;) | 内容(&) | 号码?内容 | 号码;内容 | 号码&内容 |
|---|---|---|---|---|---|---|---|---|---|
| iPhone 5S 7.0.5 | ✓ | ✓ | ✓(1) | ✗ | ✗ | ✗ | ✗ | ✓(6) | ✗ |
| iPhone 6P 8.4 | ✓ | ✓ | ✓(1) | ✗(3) | ✗(3) | ✓ | ✗(3) | ✗(3) | ✓ |
| iPhone 6S 9.3.2 | ✓ | ✓ | ✓(1) | ✗(3) | ✗(3) | ✓ | ✗(3) | ✗(3) | ✓ |
| iPad Air 10.0 | ✓ | ✓ | ✓(1) | ✗(3) | ✗(3) | ✓ | ✗(3) | ✗(3) | ✓ |
| Sony Z2 4.4.2 | ✓(2) | ✓ | ✓ | ✓(4) | ✗(3) | ✗(3) | ✓ | ✗(3) | ✗(3) |
| 乐视1S 5.0.2 | ✓ | ✓ | ✓ | ✓ | ✗(5) | ✗(5) | ✓ | ✗(5) | ✗(3) |
| 锤子T2 5.1.1 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✓ | ✗(6) | ✗(6) |
| Mi5 6.0 | ✓ | ✓ | ✓ | ✓ | ✗(5) | ✗(5) | ✓ | ✗(7) | ✗(3) |
- 第一个号码带入;
- 启动短信APP,不启动短信编辑界面;
- 将内容全部带到收件人号码输入框中;
- 启动短信APP,开启一个对话后,内容传入;
- 将内容全部带到收件人号码输入框中,并且
,会分割为多个联系人;- 只将手机号码带到;
- 将内容全部带到收件人号码输入框中,并且
;会分割为多个联系人;
测试结论
- 在iOS(8+)系统中使用
sms:phone&body=text形式; - 在iOS 7系统中使用
sms:phone;body=text形式,只把手机号带入系统; - 在Android中使用
sms:phone?body=text形式。
编码要求
- 在代码中统一使用
sms:phone[&|;|?]body=text形式,phone和body=text均可省略; - 在iOS(8+)中使用
&做分隔符,在其他iOS系统中使用;做分隔符; - 在Android中使用
?做分隔符; - href属性统一使用
sms:phone?body=text形式赋值(在有条件直接使用1、2、3规则URI的情况下直接使用); - 编写sms函数,将4中的URI修改为符合1、2、3规则的URL,并对href更新。