【问题标题】:How to pre-populate the sms body text via an html link如何通过 html 链接预填充短信正文
【发布时间】:2011-09-22 18:06:04
【问题描述】:

如何使用html链接打开预填充正文的短信应用?

我阅读的所有内容似乎都表明 sms:18005555555?body=bodyTextHere

应该可以,但在 iPhone 上,这不起作用。如果我取出 ?body=bodyTextHere,只使用 sms:phonenumber,就可以了。

我见过几个例子,其中 QR 码通过 safari 链接执行此操作。他们如何能够预先填充正文?

【问题讨论】:

标签: html ios hyperlink sms


【解决方案1】:

【讨论】:

  • 此页面无法访问
  • iOS8 不再如此。您可以发送 Link - & 符号在 body= 之前。语法上令人困惑,是的,但它对我有用,并且正文填充了所需的消息。
  • 确认 iOS 10.2 不支持上面链接中描述的“body”部分。
  • stackoverflow.com/questions/39529099/…看来似乎不再正确
【解决方案2】:

Android 和 iPhone 目前都不支持点击短信超链接中的正文复制元素。 不过,它可以通过编程方式完成,

MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;

picker.recipients = [NSArray arrayWithObject:@"48151623"];  
picker.body = @"Body text.";

[self presentModalViewController:picker animated:YES];
[picker release];

【讨论】:

  • 那是目标 C 吗?你如何从 JavaScript 调用它或在 HTML 中使用它?听起来不可能?
  • 能否取消标记为已接受?这根本不能回答问题。我实际上发布了一些确实有效并回答了问题的内容。
【解决方案3】:

我们找到了一种建议的方法并进行了测试:

<a href="sms:12345678?body=Hello my friend">Send SMS</a>

结果如下:

  • iPhone4 - 故障(消息体为空);
  • 诺基亚 N8 - 好的(消息正文 - “你好,我的朋友”,至 "12345678");
  • HTC Mozart - 故障(消息“不支持的页面”(点击后 “发送短信”链接));
  • HTC Desire - 故障(消息“无效的收件人:
    ”(点击“发送短信”链接后))。

因此我得出结论,它并没有真正起作用 - 至少使用这种方法。

【讨论】:

【解决方案4】:

事实证明,这是 100% 可能的,虽然有点 hacky。

如果您希望它在 Android 上运行,您需要使用以下格式:

&lt;a href="sms:/* phone number here */?body=/* body text here */"&gt;Link&lt;/a&gt;

如果你想让它在 iOS 上运行,你需要这个:

&lt;a href="sms:/* phone number here */;body=/* body text here */"&gt;Link&lt;/a&gt;

现场演示:http://bradorego.com/test/sms.html(请注意“电话和 ?body”和“电话和 ;body”应自动填充 to: 字段和正文文本。查看源以获取更多信息)

更新:

显然 iOS8 不得不改变我们的事情,因此感谢其他一些评论者/回复者,iOS 有了新的风格:

&lt;a href="sms:/* phone number here */&amp;body=/* body text here */"&gt;Link&lt;/a&gt;

(电话号码可选)

【讨论】:

  • 注意:我还没有在最新的操作系统版本(iOS7/iPhone 5S/5C 和 Android 4.4)上测试过这些。有一些报告称它们可能不再工作,尤其是在 Android 切换到使用环聊而不是原生 SMS 应用程序的情况下。有机会我会调查的。
  • 我现在看了一下,因为它有时工作,有时不工作,这看起来很奇怪。我的发现:如果您拨打一个您之前至少发送过一条短信的号码,则该链接可以与“body”一起正常工作。如果它是一个全新的号码,你就很不走运,你只能得到这个号码:(
  • 注意:处理sms URI的应用程序可以在Android上更改,许多制造商都这样做;因此,虽然它可能适用于特定设备/应用程序,但可能无法在另一个设备/应用程序上运行(或仅在更新后)。我的建议是永远不要在 Android 上使用它,除非你只是设置电话号码;仅在您测试过的 iOS 版本和非 Android 平台上使用。
  • @OrangeDog 查看我对 iOS 7 的回答 stackoverflow.com/questions/6480462/…
  • 所有链接似乎都不适用于 iOS 11.1 中的正文
【解决方案5】:
<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;
})

【讨论】:

  • 适用于大多数 android,以及 IOS 5 和 6。不适用于 IOS 7。
【解决方案6】:

对于 iOS 8,试试这个:

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

切换“;”用“&”为我工作。

【讨论】:

  • fwiw 我刚刚在 iOS 10 上测试过它,它仍然可以工作:)。
  • @landen 如果 SMS 应用程序已经在后台打开,这将非常有效。如果不是,我只是让应用程序在我的手机上打开,没有电话号码或消息正文。有什么想法吗?
【解决方案7】:

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:"]

【讨论】:

    【解决方案8】:
    <a href="sms:/* phone number here */&body=/* body text here */">Link</a>
    

    这适用于我的 iPhone 5S!

    【讨论】:

      【解决方案9】:

      我发现,在带有IOS 7的iPhone 4上,只有在手机的联系人列表中设置了电话号码,才能将正文放入短信中。

      因此,如果 0606060606 是我的联系人的一部分,以下将起作用:

      <a href="sms:0606060606;body=Hello my friend">Send SMS</a>
      

      顺便说一句,在 iOS 6 (iPhone 3GS) 上,它只需要一个主体:

      <a href="sms:;body=Hello my friend">Send SMS</a>
      

      【讨论】:

        【解决方案10】:

        我知道这是一个旧线程,但偶然发现它并发现某些部分不再相关。

        我发现如果您只想按文本填充而不添加电话号码,您可以执行以下操作:

        sms:?&body=/* message body here */
        

        【讨论】:

        • 这就是我一直在寻找的答案。感谢您的帮助!
        • 效果很好,但是从 OSX 完成后,它会打开一条短信至:?,知道如何让它显示为空白吗?我试过sms:?bodysms:;?body,第一次尝试发送到?第二个尝试发送到 ;
        • @JoshuaOhana 如果您尝试“sms:?0123456789&body=My Message”会发生什么?抱歉,手头上没有任何 Apple 设备。
        • 不适用于 Android 设备。只有 ?body= 可以解决问题。
        【解决方案11】:

        只需按此顺序放置所有符号(我仅按此顺序对其进行了测试,因为它对我来说在代码方面最有意义)。

        正文链接的注意事项...我只是放了...;?&amp;body=。另外,请注意,我发现我需要对任何空格使用%20

        我已经在我的 iphone (v. 9.2) 和另一个 android 上对其进行了测试,它工作得很好。

        这将解决必须为不同设备破解它的问题。我在 SMS 中测试它时没有工件。

        <a href="sms:19131234567;?&body=Question%20from%20mywebsite.com.%20%20MY%20MESSAGE%20-%20" title="Click here to TEXT US gallery token needs updating!">Send me SMS</a>
        

        【讨论】:

        • 当我不想预先填充数字时,只需删除数字并留下分号 (sms:;?&body=Questi..) 在 android 7 本机信使上工作
        • 2017-11-17:在 Aquaris BQ、Nexus、iPhone 7 和 LPhone 上试用过,效果很好。尝试使用各种浏览器(Chrome、Firefox、Opera、本机)。非常感谢!
        • 在 Android 上,这取决于正在使用的 SMS 应用程序。例如,在带有 QKSMS 应用程序的 Android 9 上,这会尝试向 ;?并且身体不包括在内。 (QKSMS 不是默认应用程序,但它可能会被不希望 SMS 在达到一定大小后变为 MMS 的人使用。)不幸的是,HTML 页面无法确定哪个 SMS 应用程序将正在使用中。因此,如果我检测到 Android,我将忽略 SMS 链接。
        【解决方案12】:

        我怀疑在大多数应用程序中您不知道要给谁发短信,所以您只想填写文本正文,而不是数字。只需省略数字即可按预期工作 - 这是这种情况下 URL 的样子:

        sms:?body=message
        

        对于 iOS,除了 ;

        sms:;body=message
        

        这是我用来设置 SMS 的代码示例:

        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;
        

        【讨论】:

          【解决方案13】:

          每个操作系统版本都有不同的处理方式。看看sms-link library

          【讨论】:

            【解决方案14】:

            点击文本链接的问题之一是解决不存在本机短信应用程序的桌面场景。一个解决方案是使用 Zipwhip 的 Click-to-Text 按钮创建器。

            • 在桌面上,它们会根据用户的输入在幕后向您发送一条真实的文本消息。
            • 在 iOS 或 Android 上,您将获得本机短信功能。

            https://www.zipwhip.com/create-sms-button/

            【讨论】:

            • 无法创建没有电话号码的按钮。
            【解决方案15】:

            要获取 sms: 和 mailto: 链接以在 iPhone 和 Android 上工作,无需任何 javascript,试试这个:

            <a href="sms:321-555-1111?&body=This is what I want to sent">click to text</a>
            
            
            <a href="mailto:someone@sample.com?&subject=My subject&body=This is what I want to sent">click to email</a>
            

            我在适用于 Android 和 iPhone 的 Chrome 以及 iPhone 上的 Safari 上对其进行了测试。
            他们都按预期工作。 他们也可以在没有电话号码或电子邮件地址的情况下工作。

            【讨论】:

              【解决方案16】:

              (只是一点点话题),但如果你搜索一下,你可能会在这里绊倒...... 在 markdown 中(使用 parsedown 和 iOS / android 测试)你可以这样做:

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

              【讨论】:

                【解决方案17】:

                Android 和 iOS 不需要两个单独的锚标记。 这应该会有所帮助。

                // 无联系电话
                &lt;a href="sms:?&amp;body=message"&gt;Text Message&lt;/a&gt;

                // 有联系电话
                &lt;a href="sms:1234567890;?&amp;body=message"&gt;Text Message&lt;/a&gt;

                // 适用于安卓和iOS

                【讨论】:

                • 感谢您,在 iOS 和 Android 上运行良好!注意 MacOS 上的 Without Contact Number 版本 - 它将 SMS to 设置为 ?
                【解决方案18】:

                您不仅需要担心 iOS 和 Android,还需要担心哪个 Android 消息传递应用程序。用于 Note 9 和一些新星系的谷歌消息应用程序不会以文本打开,但三星应用程序可以工作。解决方案似乎是在短信之后添加//:

                所以短信://15551235555

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

                应该是

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

                【讨论】:

                • 你知道这适用于所有安卓还是某些版本?这是适用于我的 Pixel 2,android 9 的版本
                • 我在测试过的旧机器人上也没有遇到任何问题。
                • 另外,如果您不提供电话号码,它似乎不起作用(我知道这不是原始问题的一部分,但知道它可能很有用)
                【解决方案19】:

                为了使用 Android,您使用以下代码

                <a href="sms:+32665?body=reg fb1>Send SMS</a>
                

                对于 iOS,您可以使用以下代码

                <a href="sms:+32665&body=reg fb1>Send SMS</a>
                

                以下代码适用于 iO 和 Android

                <a href="sms:+32665?&body=reg fb1>Send SMS</a>
                

                【讨论】:

                  【解决方案20】:

                  Android 和 iOS 仅限正文:

                  <a href="sms://;?&body=Hello%20World">Only body</a>
                  

                  Android 和 iOS 一个收件人只有正文:

                  <a href="sms://+15552345678;?&body=Hello%20World">one recipient only with body</a>
                  

                  仅限 Android 具有正文的多个收件人:

                  <a href="sms://+15552345678, +15552345679;?&body=Hello%20World">Android multiple recipients with body</a>
                  

                  仅限 iOS 具有正文的多个收件人:

                  <a href="sms://open?addresses=+15552345678,+15552345679;?&body=Hello%20World">iOS multiple recipients with body</a>
                  

                  注意正文应该是 URI 编码的。

                  【讨论】:

                  • 你在这里粉碎了它。感谢您的现代更新。我的 HTML 验证器在使用“;?&”组合时给我带来了麻烦,这让我觉得这可能有问题,但我现在手头有一个短期用例。
                  • 是否可以通过短信填充 iOS 的可选主题字段?
                  【解决方案21】:

                  在 iOS 11+ 上无法打开带有正文的短信应用,没有收件人。

                  以上解决方案都不适合我,它根本没有打开或打开时在收件人中预先填充了一些东西(如“;”)。

                  最后我得到了这个仅用于正文的语法:

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

                  【讨论】:

                    【解决方案22】:

                    使用到 iOS 14,运行良好!

                    ?body= //for Android
                    &body= //for iOS
                    

                    【讨论】:

                      【解决方案23】:

                      对于那些想要在 2022 年有效的解决方案的人,我设置了一个小型网络应用程序,它只自动使用适用于 iOS、macOS 和 Android 的正确格式。

                      https://copy.gives/18005555555?body=Body+text+here
                      

                      2022 年的问题是,在 iOS 上,您 * 必须 * 使用双斜线以及 /&amp;

                      所以相应的工作网址如下

                      sms://18005555555/&body=Body%20text%20here - iOS and macOS
                      sms://18005555555/?body=Body%20text%20here - Android
                      

                      请注意 Apple 设备的 /&amp; 和 Android 设备的 /?

                      您可以在这里尝试一些工作示例(不能嵌入):

                      https://jsfiddle.net/thatguysam/swLtjh0q/

                      【讨论】:

                        猜你喜欢
                        • 2020-06-21
                        • 1970-01-01
                        • 2018-04-15
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-01-22
                        • 2015-05-21
                        • 1970-01-01
                        相关资源
                        最近更新 更多