如何通过 HTML 链接预填短信正文内容

148
如何使用html链接打开短信应用并预填写内容?
我所看到的所有内容似乎都表明sms:18005555555?body=bodyTextHere应该可以工作,但在iPhone上无法工作。如果我去掉?body=bodyTextHere,只使用sms:phonenumber,它就可以工作。
我看到过几个二维码通过Safari链接实现此功能。他们是如何预先填充正文文本的?

我想知道这些QR扫描器是否直接打开了短信应用程序... - merlincam
我认为这是不可能的。请参考以下链接:https://dev59.com/Y3VD5IYBdhLWcg3wWKLc http://stackoverflow.com/questions/1517169/sending-pre-populated-sms-from-iphone-application - Jason Gennaro
这还是真的吗?没有方法? - tyler
这是完全可能的。请查看下面的答案获取信息。 - Brad Orego
24个回答

4

Bradorego的解决方案适用于我,但这里是更详细的答案。

需要注意的是,您需要使用%20而不是+对正文进行编码。对于PHP,这意味着使用rawurlencode($body)而不是urlencode($body)。否则,您会在旧版iOS上的消息中看到加号,而不是空格。

这是一个jQuery函数,它将重新调整您的iOS设备的SMS链接。 Android /其他设备应该正常工作,不会执行该代码。

HTML:

<a href="sms:+15551231234?body=Hello%20World">SMS "Hello World" to 555-123-1234</a>

jQuery:

(function() {
  if ( !navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ) return;

  jQuery('a[href^="sms:"]').attr('href', function() {
    // Convert: sms:+000?body=example
    // To iOS:  sms:+000;body=example (semicolon, not question mark)
    return jQuery(this).attr('href').replace(/sms:(\+?([0-9]*))?\?/, 'sms:$1;');
  });
})();

如果可能的话,考虑使用像 a.sms-link 这样的类,而不是 a[href^="sms:"]

4
<a href="###" data-telno="13800000000" data-smscontent="hello" class="XXXXX XXXXXX XXXXXX sendsms"/>

$('.sendsms').on('click', function(){
    var p = $(this).data('telno'),
        c = $(this).data('smscontent'),
        t = ';';

    if (!ios) { // add your own iOS check
        t = '?';
    }
    location.href = 'sms:'+ p + t + c;
})

1
适用于大多数安卓系统和IOS 5和6。不支持IOS 7。 - David C

3

1
该页面无法访问了。 - Kirk Hammett
1
在iOS8中,这已经不再是真的了。您可以发送<a href="sms:[phone number]&body=body text">Link</a> - &符号在body=之前。语法上有些混乱,但对我来说它起作用了,并且body填充了所需的消息。 - Greg Johnson
1
已确认iOS 10.2不支持如上链接中所述的“body”部分。 - Nicodemuz
根据https://dev59.com/-Zrga4cB1Zd3GeqPsc9z的说法,这似乎不再是真的了。 - morels

2

除了iOS和Android,你还需要担心哪个Android消息应用程序。 Note 9和一些新的Galaxy手机使用Google消息应用程序无法打开文本,但是三星应用程序可以正常工作。解决方案似乎是在sms:后面添加//。

因此,sms://15551235555

原始答案:最初的回答

<a href="sms:/* phone number here */?body=/* body text here */">Link</a>

应该是

<a href="sms://15551235555?body=Hello">Link</a>

你知道这个适用于所有安卓系统还是只适用于特定版本吗?这是适用于我的Pixel 2,安卓9的版本。 - JCisar
我在之前测试的老款安卓手机上也没有遇到过问题。 - Dan Parker
2
同时,如果您没有提供电话号码,它似乎无法正常工作(我知道这不是原始问题的一部分,但了解这一点可能很有用)。 - JCisar

2

我猜在大多数应用程序中,你不知道要给谁发短信,所以你只想填写短信内容,而不是号码。如果只留下内容而不填写号码,它会按照你预期的方式工作 - 在这种情况下,URL看起来像这样:

sms:?body=message

对于iOS,同样的事情,只需要使用“;”即可。
sms:;body=message

以下是我用来设置短信的代码示例:

这里是我用来设置短信的代码示例:

var ua = navigator.userAgent.toLowerCase();
var url;

if (ua.indexOf("iphone") > -1 || ua.indexOf("ipad") > -1)
   url = "sms:;body=" + encodeURIComponent("I'm at " + mapUrl + " @ " + pos.Address);
else
   url = "sms:?body=" + encodeURIComponent("I'm at " + mapUrl + " @ " + pos.Address);

   location.href = url;

2
<a href="sms:/* phone number here */&body=/* body text here */">Link</a>

这在我的iPhone 5S上可以正常工作!


1

虽然和编程主题有点偏差,但是如果你搜索的话,可能会偶然发现这里......

Markdown中(已测试过使用Parsedown及在iOS/Android上),你可以这样做:

   [Link](sms:phone_number,?&body=URL_encoded_body_text)
   //[send sms](sms:1234567890;?&body=my%20very%20interesting%20text)

1
使用到iOS 14,运行良好!
?body= //for Android
&body= //for iOS

1

我在iOS 11+上遇到了无法仅通过短信正文打开应用程序的问题,没有收件人。

以上解决方案都不适用于我,它根本没有打开或者在收件人中预填入了某些内容(例如“;”)。

最终,我采用了以下仅包含正文的语法:

sms:///?body=Hello%20World

1

通用链接使用 tel &? body

<a href="sms://+123456789&?body=url works on android and also ios">link ios+android</a>

https://output.jsbin.com/puqicel

链接 iOS + Android

<a href="sms://+123456789&?body=url works on android and also ios">link ios+android</a>


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