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

如何使用 HTML 链接打开一个预填充身体的短信应用程序?

我所读到的一切似乎都表明短信: 1800555555? body = body TextHere

应该可以,但是在 iPhone 上,这样不行。如果我取出?Body = body TextHere,使用 sms: phonennumber 就可以了。

我曾经看到过几个二维码通过 Safari 链接实现这一点的例子。它们如何能够预填充正文文本?

225799 次浏览

Android 和 iPhone 目前都不支持 Tap to SMS 超链接中的 body copy 元素。 不过它可以通过编程来完成,

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


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


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

我们发现了一种拟议的方法并进行了测试:

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

结果如下:

  • IPhone4-fault (留言空白) ;
  • 诺基亚 N8-ok (消息正文-“你好,我的朋友”,到 “12345678”) ;
  • HTC Mozart-fault (消息“ unsupport page”(单击 「发送短讯」连结) ;
  • HTC Desire-fault (消息“无效收件人:
    < 12345678? body = Hellomyfriend >”(按「发送短讯」连结后)。

因此,我得出结论,它并不真正起作用——至少在这种方法下是如此。

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

如果你想让它在 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(注意“电话和?“ body”和“ Phone and; body”应该同时自动填充 to: 字段和 body 文本。查看源代码获取更多信息)

更新:

显然 iOS8不得不改变我们的风格,所以多亏了其他一些评论者/回复者,iOS 出现了一种新的风格:

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

(电话号码可选)

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

对于 iOS8,试试这个:

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

把“ ;”改成“ &”对我来说很管用。

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

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

这在我的 iPhone 5S 上也能用!

我发现,在 带 IOS 7的 iPhone4上,你只有在手机联系人列表中设置了一个电话号码,才能把一具尸体放进短信中。

如果0606060606是我联系人的一部分,那么以下方法可行:

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

顺便说一句,在 IOS6(iPhone 3GS)上,它只需要一个机身就可以工作:

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

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

我发现,如果你想只填充文本而不添加电话号码,你可以做到以下几点:

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

只需按照这个顺序放置所有的符号(我只按照这个顺序测试它,因为它在代码方面对我来说最有意义)。

注意身体的连接... 我刚刚放了... ;?&body=。另外,请注意,我发现我需要对任何空格使用 %20

我已经在我的 iphone (v.9.2)和另一个 Android 上测试过,它运行得很好。

这将解决不得不为不同的设备破解它的问题。我在短信里测试的时候没有发现藏物。

<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>

我怀疑在大多数应用程序中,您不知道给谁发短信,所以您只想填充文本正文,而不是编号。这正如您所预期的那样,只是省略了数字——在这种情况下,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;

每个操作系统版本都有不同的操作方式

点击到文本链接的问题之一是解决桌面环境中不存在本地文本应用程序的问题。一个解决方案是使用 Zipwhip 的“点击到文本”按钮创建器。

  • 在桌面上,他们通过用户的输入在幕后向你发送真实的文本信息。
  • 在 iOS 或安卓系统上,你可以获得原生的短信功能。

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

要获得 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>

我在安卓和 iPhone 的 Chrome 浏览器上测试过,在 iPhone 的 Safari 浏览器上测试过。
他们都按预期工作。 他们的工作没有电话号码或电子邮件地址以及。

(只是一个小的话题) ,但也许如果你搜索,你可以绊倒在这里..。 在 markdown (通过 parsedown 和 iOS/android 测试)中,你可以这样做:

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

Android 和 iOS 不需要两个独立的锚标记。 这个应该有用。

//无联络电话
<a href="sms:?&body=message">Text Message</a>

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

//同时适用于 Android 和 iOS

你不仅要担心 iOS 和 Android,还要担心哪个 Android 消息应用。Note9和一些新星系的谷歌消息应用程序不用文本打开,但三星的应用程序可以工作。解决方案似乎是在短信后面加上//:

短信://15551235555

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

应该是

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

使用 Android 你可以使用下面的代码

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

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

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

下面的代码同时适用于 iOs 和 Android

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

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 编码的。

正在努力打开短信应用程序的能力只有身体的消息,没有收件人在 iOS11 + 。

上面的解决方案对我来说都不起作用,它根本没有打开,或者打开时在收件人中预先填充了一些内容(比如‘ ;’)。

最后,我得到了这种只适用于 body 的语法:

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

一直用到 iOS14,运行良好!

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

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

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

2022年的问题是,在 iOS 上,你必须像使用 /&一样使用双斜杠

因此,各个工作 URL 如下所示

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

注意 Apple 设备的 /&和 Android 设备的 /?

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

Https://jsfiddle.net/thatguysam/swltjh0q/