在浏览器中,可以使用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)
  1. 第一个号码带入;
  2. 启动短信APP,不启动短信编辑界面;
  3. 将内容全部带到收件人号码输入框中;
  4. 启动短信APP,开启一个对话后,内容传入;
  5. 将内容全部带到收件人号码输入框中,并且,会分割为多个联系人;
  6. 只将手机号码带到;
  7. 将内容全部带到收件人号码输入框中,并且;会分割为多个联系人;

测试结论

  1. 在iOS(8+)系统中使用sms:phone&body=text形式;
  2. 在iOS 7系统中使用sms:phone;body=text形式,只把手机号带入系统;
  3. 在Android中使用sms:phone?body=text形式。

编码要求

  1. 在代码中统一使用sms:phone[&|;|?]body=text形式,phonebody=text均可省略;
  2. 在iOS(8+)中使用&做分隔符,在其他iOS系统中使用;做分隔符;
  3. 在Android中使用?做分隔符;
  4. href属性统一使用sms:phone?body=text形式赋值(在有条件直接使用1、2、3规则URI的情况下直接使用);
  5. 编写sms函数,将4中的URI修改为符合1、2、3规则的URL,并对href更新。