如何通过html链接预填充短信正文


113

如何使用html链接打开带有预填充内容的短信应用?

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

应该可以,但是在iPhone上不起作用。如果我将?body = bodyTextHere取出,并且仅使用sms:phonenumber,它将起作用。

我见过几个通过野生动物园链接执行QR码的实例。他们如何能够预先填充正文?


我想知道这些QR扫描仪是否正在直接打开SMS应用程序...
merlincam 2011年


这仍然是正确的吗?
tyler

这是100%可能的。请参阅以下我的答案以获取信息。
Brad Orego

Answers:


178

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

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

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

如果您希望它在iOS上运行,则需要:

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

此处的现场演示:http : //bradorego.com/test/sms.html(请注意,“ Phone and?body”和“ Phone and; body”应自动填写“ to:”字段和正文文本。查看源代码以获取更多信息)信息)

更新:

显然,iOS8必须去改变我们的事情,因此,由于其他一些评论者/响应者,iOS有了一种新样式:

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

(电话号码是可选的)


5
注意:我尚未在最新的OS版本(iOS7 / iPhone 5S / 5C和Android 4.4)上测试过这些。有报告称它们可能不再起作用,尤其是在Android切换为使用环聊而非本地短信应用的情况下。如果有机会,我会调查一下。
布拉德·奥雷戈

3
我现在看一下,因为它有时有效,有时却无效,这看起来很奇怪。我的发现:如果您拨打一个号码,至少之前已经发送了一条短信,则该链接在“正文”下可以正常工作。如果这是一个完整的新数字,那么您不走运,您只会得到该数字:(
MMachinegun 2014年

7
重要说明:处理smsURI 的应用可以在Android上进行更改,许多制造商都可以这样做;因此,尽管它可以在特定的设备/应用上运行,但可能无法在其他设备/应用上运行(或仅在更新后)。我的建议是除非您仅设置电话号码,否则切勿在Android上使用此功能。仅在您测试过的iOS版本和非Android平台上使用它。
fregante

1
@OrangeDog看我为iOS的7回答stackoverflow.com/questions/6480462/...
paaacman

1
这些链接似乎都无法在iOS 11.1中与body配合使用
Toskan

49

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

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

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

1
这就是我一直在寻找的答案。谢谢您的帮助!
Konrad G

1
效果很好,但是在OSX中完成后,它会打开一条文本消息To ?:,如何使它显示为空白?我试过sms:?bodysms:;?body,第一个试图发送到?第二次尝试发送给;
约书亚·奥哈娜

@JoshuaOhana如果尝试“ sms:?0123456789&body =我的消息”会发生什么?抱歉,无法使用任何Apple设备。
阿里(Ali)

不适用于Android设备。只能使用?body =来达到目的。
Doodlemeat

40

对于iOS 8,请尝试以下操作:

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

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


3
首先,我刚刚在iOS 10上对此进行了测试,但它仍然有效:)。
罗布·道森

@landen如果已经在后台打开了SMS应用程序,则可以正常工作。如果不是,我只是要在手机上打开该应用程序,而没有电话号码或消息正文。有任何想法吗?
DMEM

31

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

对于身体链接通知...我只是把... ;?&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本地Messenger上工作时,我不希望数字预先填充
ibex

2017-11-17:在Aquaris BQ,Nexus,iPhone 7和LPhone上进行了尝试,这就像一种魅力。尝试过各种浏览器(Chrome,Firefox,Opera,本机)。非常感谢!
Urosh T.

在Android上,这取决于所使用的SMS应用程序。例如,在带有QKSMS应用程序的Android 9上,这会尝试向;?发送消息。并且身体不包括在内。(QKSMS不是默认应用程序,但不想让SMS达到一定大小后成为MMS的人可能会使用它。)不幸的是,HTML页面无法确定哪个SMS应用程序将正在使用中。因此,如果我检测到Android,我将忽略SMS链接。
西拉斯·布朗

15

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

//没有联系电话
<a href="sms:?&body=message">Text Message</a>

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

//在Android和iOS上均可使用


1
感谢您在iOS和Android上运行良好!留意Without Contact NumberMacOS上的版本-它会将SMS设置to?
Ollie Khakwani

10

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

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

结果如下:

  • iPhone4-故障(消息为空);
  • 诺基亚N8-确定(消息正文-“我的朋友你好”,致“ 12345678”);
  • HTC Mozart-故障(消息“不支持的页面”(单击“发送短信”链接后));
  • HTC
    Desire- 错误(消息“无效的收件人:<12345678?body = Hellomyfriend>”(单击“发送短信”链接后))。

因此,我得出结论,它实际上并不起作用-至少使用此方法。


对于iPhone4的,看到我的回答波纹管stackoverflow.com/questions/6480462/...
paaacman

7

仅限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编码。


5

要获取短信和邮寄:链接,这些链接在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上进行了测试。
他们都按预期工作。他们也没有电话号码或电子邮件地址。


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;');
  });
})();

如果可能,请考虑使用like 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;
})

在大多数的Android以及iOS 5和6不起作用适用于iOS 7
大卫ç

3

1
此页面不再可用
Kirk Hammett 2014年

1
iOS8不再是这样。您可以发送<ahref="sms:[电话号码]&body=body文本">链接</a>-“&”号位于body =之前。语法上令人困惑,是的,但是它对我有用,并且身体中填充了所需的消息。
格雷格·约翰逊

1
确认iOS 10.2不支持以上链接中所述的“主体”部分。
Nicodemuz


3

要使用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>

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

这适用于我的iPhone 5S!


2

我怀疑在大多数应用程序中,您都不知道要发短信给谁,因此您只想填写文本正文,而不是数字。只需省略数字即可达到预期的效果-在这种情况下,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;

2

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

所以短信:// 15551235555

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

应该

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

您知道这是否适用于所有android或仅适用于某些版本吗?这是适用于我的Pixel 2,android 9的版本
-JCisar

我在经过测试的较旧的android上也没有任何问题。
丹·帕克

2
另外,当您不提供电话号码时,它似乎也不起作用(我知道这不是原始问题的一部分,但可能会有用)
JCisar

1

(只是一点点的话题),但是如果您搜索过,可能会在这里绊倒…… 在markdown中(经过parsedown和iOS / android测试),您可以这样做:

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

0

我发现,在带有iOS 7的iPhone 4上,只有在电话的联系人列表中设置电话号码时,才能将正文放在SMS上。

因此,如果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>


-1

点击文本链接的问题之一是解决不存在本机文本应用程序的桌面方案。一种解决方案是使用Zipwhip的“单击文本”按钮创建器。

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

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


没有电话号码无法创建按钮。
Michal

-3

目前,Android和iPhone均不支持Tap to SMS超链接中的主体复制元素。可以通过编程方式完成

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中使用它?听起来不可能?
sparkyspider 2012年

可以不标记为接受吗?这根本不能回答问题。我实际上发布了一些行之有效的方法,并且确实回答了这个问题。
Brad Orego 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.