• react 网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容


    1.需求 

    最近在做一个国际网站app,需要把app中某个页面的图文链接分享到国外各大社交平台上(facebook,whatapp,telegram,twitter等),以及通过WhatApp聊天方式分享,和SMS短信方式分享链接内容,该怎么做呢?图示如下:

    分享到国外各大社交平台: 

    操作说明:

            当点击COPY URL时,复制分享链接到剪切板,然后点击各个分享平台图标,调用分享apk或者方法,从而调起社交平台app或者对应的web网页 ,进行分享操作

    通过WhatApp方式,SMS方式分享: 

     操作说明:

            1.WhatsAPP分享:

                    程序生成随机电话号码,默认选中第一个电话号码,点击WhatsAPP后,调取WhatApp相关方法接口,进行分享操作,然后电话号码变灰,当再次点击WhatsAPP时,触发下一个电话号码操作,图示如下:

            2.SMS方式分享

                    点击SMS按钮时,触发SMS接口请求,调用SMS相关url进行分享操作

    2.实现分享到国外各大社交平台

    先上代码,通过点击 COPY URL 复制分享链接到剪切板,然后点击各个平台图标,实现分享操作

    COPY URL,点击平台图标相关代码: 

    1. import React, {useState} from "react";
    2. import axios from "axios";
    3. import Scroll from "../../components/Scroll";
    4. import {CountDown, Steps, Tabs, Toast, Popup, Cell, Dialog, Swiper, NoticeBar, Image} from "react-vant";
    5. import {CopyToClipboard} from "react-copy-to-clipboard";
    6. const Index = () => {
    7. //分享url:拼接要分享的页面url,以及带上参数
    8. //注意:这里参数有的分享平台不支持?格式,可以使用简化格式,eg:http:www.test.com/target_page/100/param
    9. const GetUrl = (tagId) => {
    10. return `${window.location.origin}/target_page?param=${tagId}`;
    11. };
    12. //各个分享平台对应的url
    13. const GetWhatsAppUrl = (tagId) => {
    14. //也可以用这个`https://api.whatsapp.com/send?text=` + encodeURIComponent("test") + encodeURIComponent("\n\n" + GetInviteWheelUrl(tagId));
    15. return encodeURI(
    16. `whatsapp://send?text=test\n${GetUrl(tagId)}`
    17. );
    18. };
    19. const GetTelegramUrl = (tagId, text) => {
    20. return encodeURI(
    21. "https://t.me/share/url?url=" + encodeURIComponent(GetInviteWheelUrl(tagId)) + "&text=" + encodeURIComponent(text)
    22. );
    23. };
    24. const GetTwitterUrl = (tagId, text) => {
    25. return encodeURI(
    26. "https://twitter.com/intent/tweet?text=" + encodeURIComponent(text) + "&url=" + encodeURIComponent(GetInviteWheelUrl(tagId))
    27. );
    28. };
    29. const GetFacebookUrl = (tagId, text) => {
    30. return "https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(GetUrl(tagId)) + "&t=" + encodeURIComponent(text)
    31. };
    32. //分享到社交软件
    33. const shareFriend = (type) => {
    34. let shareText = "分享说明" ;
    35. switch (type) {
    36. case "facebook":
    37. if (window.document) {
    38. if (window.document.getElementById("og_url")) {
    39. window.document.getElementById("og_url").content=GetUrl(rid);
    40. }
    41. if (window.document.getElementById("og_description")) {
    42. window.document.getElementById("og_description").content=shareText;
    43. }
    44. if (window.document.getElementById("og_title")) {
    45. window.document.getElementById("og_title").content=shareText;
    46. }
    47. if (window.document.getElementById("og_image")) {
    48. window.document.getElementById("og_image").content=window.location.origin + "../images/banner_x2.png";
    49. }
    50. }
    51. window.location.href = GetFacebookUrl(tagId, shareText);
    52. return;
    53. case "whatApp":
    54. if (window.document) {
    55. if (window.document.getElementById("og_url")) {
    56. window.document.getElementById("og_url").content=GetUrl(tagId);
    57. }
    58. if (window.document.getElementById("og_description")) {
    59. window.document.getElementById("og_description").content=shareText;
    60. }
    61. if (window.document.getElementById("og_title")) {
    62. window.document.getElementById("og_title").content=shareText;
    63. }
    64. if (window.document.getElementById("og_image")) {
    65. window.document.getElementById("og_image").content=window.location.origin + "../images/banner_x2.png";
    66. }
    67. }
    68. window.location.href = GetWhatsAppUrl(tagId, shareText);
    69. return;
    70. case "telegram":
    71. window.location.href = GetTelegramUrl(tagId, shareText);
    72. return;
    73. case "twitter":
    74. if (window.document) {
    75. if (window.document.getElementById("tw_description")) {
    76. window.document.getElementById("tw_description").content=shareText;
    77. }
    78. if (window.document.getElementById("tw_title")) {
    79. window.document.getElementById("tw_title").content=shareText;
    80. }
    81. if (window.document.getElementById("tw_card")) {
    82. window.document.getElementById("tw_card").content=window.location.origin + "../images/banner_x2.png";
    83. }
    84. if (window.document.getElementById("tw_card")) {
    85. window.document.getElementById("tw_card").content=window.location.origin + "../images/banner_x2.png";
    86. }
    87. if (window.document.getElementById("tw_image")) {
    88. window.document.getElementById("tw_image").content=window.location.origin + "../images/banner_x2.png";
    89. }
    90. if (window.document.getElementById("tw_url")) {
    91. window.document.getElementById("tw_url").content=GetUrl(rid);
    92. }
    93. }
    94. window.location.href = GetTwitterUrl(tagId, shareText);
    95. return;
    96. }
    97. }
    98. return (
    99. <div class={style.main}>
    100. <ul class={style.share_1_link}>
    101. <li class={style.share_1_link_intro} onClick={() => shareFriend("facebook")}>
    102. <div class={style.share_1_link_img}>
    103. <a href="javascript:;" rel="noreferrer">
    104. <img src={"../images/share3.svg"} />
    105. a>
    106. div>
    107. <div class={style.share_1_link_text}>
    108. Facebook
    109. div>
    110. li>
    111. <li class={style.share_1_link_intro} onClick={() => shareFriend("whatApp")}>
    112. <div class={style.share_1_link_img}>
    113. <a href="javascript:;" rel="noreferrer">
    114. <img src={"../images/share2.svg"} />
    115. a>
    116. div>
    117. <div class={style.bottom_share_1_link_text}>
    118. WhatApp
    119. div>
    120. li>
    121. <li class={style.share_1_link_intro} onClick={() => shareFriend("telegram")}>
    122. <div class={style.share_1_link_img}>
    123. <a href="javascript:;" rel="noreferrer">
    124. <img src={"../images/share3.png"} />
    125. a>
    126. div>
    127. <div class={style.share_1_link_text}>
    128. Telegram
    129. div>
    130. li>
    131. <li class={style.share_1_link_intro} onClick={() => shareFriend("twitter")}>
    132. <div class={style.share_1_link_img}>
    133. <a href="javascript:;" rel="noreferrer">
    134. <img src={"../images/share4.svg"}/>
    135. a>
    136. div>
    137. <div class={style.share_1_link_text}>
    138. Twitter
    139. div>
    140. li>
    141. <li class={style.share_1_link_intro}>
    142. <div class={style.share_1_link_img}>
    143. <a href={"mailto:test@test.com?body" + GetUrl(tagId)} rel="noreferrer">
    144. <img src={"../images/share5.svg"}/>
    145. a>
    146. div>
    147. <div class={style.share_1_link_text}>
    148. Email
    149. div>
    150. li>
    151. ul>
    152. div>
    153. <div class={style.copy_url_area}>
    154. <div class={style.copy_url_input}>
    155. <span id="share_url">
    156. {GetUrl(tagId)}
    157. span>
    158. div>
    159. <CopyToClipboard
    160. text={GetUrl(tagId)}
    161. onCopy={() => {
    162. Toast.success({
    163. message: "Copy Successfully",
    164. });
    165. }}
    166. >
    167. <div class={style.action_btn} style={{ flexShrink: 0 }}>
    168. COPY URL
    169. div>
    170. CopyToClipboard>
    171. div>
    172. }
    173. export default Index;

    对上面代码的说明:

            当点击CPOY URL 按钮时,调用react-copy-to-clipboard组件复制分享链接到剪切板,点击平台分享图片时,调用shareFriend()方法,进行分享配置操作,获取分享的url,以及调用各个平台分享的api,然后配置head中分享的meta(如下代码,为什么需要配置meta,因为国外很多平台在分享图文链接时,是通过爬虫来抓取meta数据进行分享数据展示的),操作后,app会调起对应平台的app或者打开对应的web页面进行分享操作

    html代码:

    1. <head>
    2. <meta id="og_url" property="og:url" content="" />
    3. <meta id="og_description" property="og:description" content="" />
    4. <meta id="og_image" property="og:image" content="" />
    5. <meta id="og_title" property="og:title" content="" />
    6. <meta id="tw_card" name="twitter:card" content="">
    7. <meta id="tw_title" name="twitter:title" content="">
    8. <meta id="tw_description" name="twitter:description" content="">
    9. <meta id="tw_image" name="twitter:image" content="">
    10. <meta id="tw_url" property="twitter:url" content="" />
    11. head>

     对上面代码说明:

            meta中的数据,就是各个平台爬虫要抓取的分享数据,根据不同平台,meta的name不一样,具体情况可看各个平台官方文档

    3.实现通过WhatsAPP以及SMS分享操作

    • 程序生成随机电话号码,默认选中第一个电话号码,点击WhatsAPP后,调取WhatApp相关方法接口,进行分享操作,然后电话号码变灰,当再次点击WhatsAPP时,触发下一个电话号码操作
    • 点击SMS按钮时,触发SMS接口请求,调用SMS相关url进行分享操作

    代码如下: 

    1. import React, {useState} from "react";
    2. import axios from "axios";
    3. import Scroll from "../../components/Scroll";
    4. import {CountDown, Steps, Tabs, Toast, Popup, Cell, Dialog, Swiper, NoticeBar, Image} from "react-vant";
    5. import {CopyToClipboard} from "react-copy-to-clipboard";
    6. const SinNumberGenerator = (x, offset) => {
    7. return (Math.sin(x + offset) + 1) / 2;
    8. };
    9. //生成随机的分享电话号码:count 电话号码个数
    10. const SharePhoneList = (count) => {
    11. let list = [];
    12. for (let i = 0; i < count; i++) {
    13. let phone = (
    14. SinNumberGenerator(((NowTimestamp / 100000) % 100000) / 50000 / Math.PI, i) * (99999 - 1000) +
    15. 1000
    16. ).toFixed(0);
    17. if (phone.length < 5) {
    18. phone = "0" + phone;
    19. }
    20. list.push({
    21. phone: phone, //电话号码
    22. state: Math.floor(Math.random()*2), //发送状态
    23. });
    24. }
    25. return list;
    26. };
    27. const Index = () => {
    28. //分享电话号码初始化
    29. const [sharePhoneList, setSharePhoneList] = useState([]);
    30. //当前选中电话号码索引
    31. const [checkedPhoneIndex, setCheckedPhoneIndex] = useState(0);
    32. //设置电话号码列表
    33. setSharePhoneList(SharePhoneList(20));
    34. setCheckedPhoneIndex(0);
    35. //分享url:拼接要分享的页面url,以及带上参数
    36. //注意:这里参数有的分享平台不支持?格式,可以使用简化格式,eg:http:www.test.com/target_page/100/param
    37. const GetUrl = (tagId) => {
    38. return `${window.location.origin}/target_page?param=${tagId}`;
    39. };
    40. const GetSeedWhatsAppUrl = (phone, tagId, text) => {
    41. return `https://api.whatsapp.com/send?phone=${phone}&text=` + encodeURIComponent(text) + encodeURIComponent("\n\n" + GetUrl(tagId));
    42. };
    43. const GetSmsUrl = (phone, tagId, text) => {
    44. return "sms:/open?addresses=" + phone + "&body=" + encodeURIComponent(text + GetUrl(tagId));
    45. };
    46. //发送whatsApp,sms
    47. const SendMessage = (type= "whatsApp") => {
    48. if (checkedPhoneIndex >= 20) {
    49. return;
    50. }
    51. let phoneList = [];
    52. let checkedPhone = "";
    53. sharePhoneList.map((value, index) => { //设置发送的号码状态
    54. if (index === checkedPhoneIndex) { //如果当前电话号码索引和遍历的索引相同,则设置电话号码状态为已完成
    55. phoneList.push({
    56. phone:value.phone,
    57. state: 1,
    58. });
    59. checkedPhone = value.phone;
    60. } else {
    61. phoneList.push({
    62. phone:value.phone,
    63. state: value.state,
    64. });
    65. }
    66. });
    67. setCheckedPhoneIndex(checkedPhoneIndex + 1);
    68. //更新电话号码列表状态
    69. setSharePhoneList(phoneList);
    70. let link = GetSeedWhatsAppUrl(checkedPhone, tarId);
    71. //发送短信
    72. if (type === "sms") {
    73. link = GetSmsUrl(checkedPhone, tarId);
    74. }
    75. window.location.href = link;
    76. }
    77. return (
    78. <div class={style.main}>
    79. <div class={style.bottom_share}>
    80. <div class={style.bottom_share_title}>
    81. Share
    82. div>
    83. <div class={style.bottom_share_phones}>
    84. {sharePhoneList.map((value, index) => (
    85. <div class={`${style.bottom_share_phone_info} ${(value.state ? style.bottom_share_phone_ok : "")}`} id={value.state}>
    86. {value.phone}
    87. div>
    88. ))}
    89. div>
    90. <div class={style.phone_send}>
    91. <div class={style.phone_send_info} onClick={() => SendMessage()}>
    92. <div class={style.phone_send_text}>
    93. <div class={style.phone_send_text1}>
    94. Send message
    95. div>
    96. <div class={style.phone_send_text2}>
    97. <span>on span>
    98. <span class={style.phone_send_text2_font}>WhatsAPPspan>
    99. div>
    100. div>
    101. <div class={style.phone_send_img}>
    102. <img src={"../images/whatsApp.png"} style={{width: "80%"}}/>
    103. div>
    104. div>
    105. <div class={style.phone_send_info} onClick={() => SendMessage("sms")}>
    106. <div class={style.phone_send_img}>
    107. <img src={"../images/sms.png"} style={{width: "80%"}}/>
    108. div>
    109. <div class={style.phone_send_text} style={{marginLeft: "-1rem"}}>
    110. <div class={style.phone_send_text1}>
    111. Send message
    112. div>
    113. <div class={style.phone_send_text2}>
    114. <span class={style.phone_send_text2_font}>SMSspan>
    115. div>
    116. div>
    117. div>
    118. div>
    119. div>
    120. div>
    121. }
    122. export default Index;

    css: 

    1. .bottom_share {
    2. width: 100%;
    3. margin-top: 1.3rem;
    4. }
    5. .bottom_share_title {
    6. font-size: 0.9rem;
    7. }
    8. .bottom_share_phones {
    9. background-color: rgba(0, 0, 0);
    10. color: #e6e3e3;
    11. display: -ms-flexbox;
    12. display: flex;
    13. width: 96%;
    14. font-size: 0.9rem;
    15. -ms-flex-wrap: wrap;
    16. flex-wrap: wrap;
    17. -ms-flex-align: center;
    18. align-items: center;
    19. -ms-flex-pack: distribute;
    20. -ms-flex-direction: row;
    21. margin-top: 0.7rem;
    22. padding-top: 0.5rem;
    23. justify-content: flex-start;
    24. flex-direction: row;
    25. }
    26. .bottom_share_phone_info {
    27. margin: 0.2rem 1.1rem;
    28. }
    29. .bottom_share_phone_ok {
    30. color: #555353;
    31. }
    32. .phone_send {
    33. width: 92%;
    34. background-color: rgba(0,0,0);
    35. display: flex;
    36. margin-bottom: 1rem;
    37. padding-left: 0.5rem;
    38. padding-right: 0.5rem;
    39. }
    40. .phone_send_info {
    41. margin: 0.6rem 0.2rem 1rem 0.2rem;
    42. display: flex;
    43. background-color: #e6e3e3;
    44. flex-direction: row;
    45. align-items: center;
    46. justify-content: space-around;
    47. padding-top: 0.35rem;
    48. padding-bottom: 0.35rem;
    49. }
    50. .phone_send_text {
    51. display: flex;
    52. color: #191717;
    53. font-weight: 500;
    54. font-size: 0.9rem;
    55. flex-direction: column;
    56. justify-content: center;
    57. }
    58. .phone_send_text2_font {
    59. font-weight: 900;
    60. }
    61. .phone_send_img {
    62. width: 30%;
    63. }

     好了,网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容操作基本完成

    4.拓展知识

    (1).Facebook

            Facebook的分享原理: 告诉Facebook你想要分享的url,Facebook爬虫机器人会主动向这个url发起爬虫操作,对这个url进行html解析,分别拿到相对于的html元素图谱,然后获取图谱中的内容并跳转到Facebook的分享页面并把获取到的内容渲染出来,后面只要点击提交分享的按钮就可以实现分享网页的功能了;对于国外第三方的分享元素图谱,一般是写在html的head部分,官方文档:https://developers.facebook.com/docs/sharing/webmasters/images/

    Facebook所对应的如下面所示:

    1. <html>
    2. <head>
    3. <meta property="og:type" content="website" />
    4. <meta property="og:url" content="要分享的链接" />
    5. <meta property="og:title" content="标题" />
    6. <meta property="og:description" content="简介" />
    7. <meta property="og:image" content="图片" />
    8. head>
    9. html>

    分享网页固定内容到Facebook

    • 使用浏览器自带分享功能 (只能分享到Facebook动态)
    • 使用js进行Facebook分享 (可分享到Facebook动态和好友)
    1. const url = "http://www.test.cn"
    2. const text = "share text"
    3. widnow.open("http:/www.facebook.com/share.php?u="+ encodeURIComponent(u) + "&t="+ encodeURIComponent(t), "sharer","toolbar=0,status=0,width=626,height=436")
    • 分享到Facebook好友(messenger) PC端:需要登录Facebook获取appid
    1. const url = "http://www.test.cn"
    2. widnow.open("https:/www.facebook.com/dialog/send?app_id=1 xxxx11&link="+url+"&redirect_uri="+url+"","_blank")
    • 移动端
    1. const url = "http://www.test.cn"
    2. widnow.open("fb-messenger://share/?link="+url)

    注意:

            如果meta已经写好了Facebook的分享内容,那么使用js改变mate分享内容是无效的,因为Facebook抓取meta是在js加载之前获取的,尽管通过js更改mate信息也无法改变Facebook已抓取到的信息,所以如果已经在head头部写好了meta的facebook分享内容,就无法通过js动态分享自定义文案

    分享网页自定义内容到Facebook

            前端编辑参数,调用第三方的分享地址,第三方回调你传的参数,解析里面meta信息,然后返回html页面,再执行js动态分享内容

    • 分析到Facebook动态(PC端和移动端都适用)
    1. let mateArr = [
    2. 'og:url','http://www.test.cn',
    3. 'og:title','title',
    4. 'og:description','description',
    5. 'og:image','http:/xxx/static/image/test.jpg',
    6. 'og:type','website'
    7. ]
    8. let mataParams = mateArr.toString()
    9. window.open('http://www.facebook.com/sharer.php?u='+ encodeURIComponent(`http://xxx/share/detail?meta=${metaParams}`))
    •  分享到Facebook好友(messenger) PC端
    1. let mateArr = [
    2. 'og:url','http://www.test.cn',
    3. 'og:title','title',
    4. 'og:description','description',
    5. 'og:image','http://xxx/static/image/test.jpg',
    6. 'og:type','website'
    7. ]
    8. let mataParams = mateArr.toString()
    9. window.open('https:/www.facebook.com/dialog/send?app_id=1xxx12&link='+ encodeURIComponent(`http://xxx/share/detail?meta=${metaParams}`)+'redirect_uri='+encodeURIComponent(`http://xxx/share/detail?meta=${metaParams}`)+'','_blank')
    • 移动端
    1. let mateArr = [
    2. 'og:url','http://www.test.cn',
    3. 'og:title','title',
    4. 'og:description','description',
    5. 'og:image','http://zzz/static/image/test.jpg',
    6. 'og:type','website'
    7. ]
    8. let mataParams = mateArr.toString()
    9. widnow.open("fb-messenger://share/?link="+encodeURIComponent(`http://xxx/share/detail?meta=${metaParams}`)+""

    在分享到Facebook上时,需要注意一下几点

    • 1.og:url 中的 url地址禁止携带参数,即 https://test.com/index.htm?key=search错误,若确实需要,请将参数放到目录层级中,如https://testcom/search/index.htm
    • 2.og:image 中的url地址只要能满足让爬虫爬取即可,是否携带参数都可以
    • 3.分享到Facebook上的图片的最佳比例是1.91:1(矩形图)或1:1(正方形图),最小尺寸是200200,低于此尺寸图片将不显示,推荐尺寸是1200630或600*315
    • 4.分享图片无法自己定义显示尺寸,使用og:image:width与og:image:height也不行
    • 5.og:title 标签不存在时,则默认读取title标签里的内容作为分享的title
    • 6.因为分享的内容采用的是爬虫的形式获取,所以在html页面一开始就要存在og:标签,供爬虫,而不可以动态的通过js脚本追加
    • 7.对于动态生成html的情况,当采用的是前后端一体的方式,如.jsp、.asp、haml等形式时,在后端动态生成参数,然后传递给前端页面即可
    • 8.对于前后端分离的情况,需要后端配合动态生成html页面
    • 9.对于分享的链接能否正常显示,可以通过Facebook分享调试器进行调试,并查看结果

    (2).WhatsApp

    原理与Facebook一样,通过爬虫获取html头部head部分的mate:og信息,有一点需要注意:WhatsApp分享到好友PC端和移动端都可以使用同一套代码,

    分享到网页版平台:https://web.whatsapp.com/send?text={内容}&url={链接}

    通用链接:https://wa.me/?text={内容},会重定向到API网关然后通过url schema的方式唤起App

    1. <html>
    2. <head>
    3. <meta property="og:type" content="website" />
    4. <meta property="og:url" content="要分享的链接" />
    5. <meta property="og:title" content="标题" />
    6. <meta property="og:description" content="简介" />
    7. <meta property="og:image" content="图片" />
    8. head>
    9. html>
    1. const url = "http://www.test.cn"
    2. const text = "share"
    3. window.open("https://api.whatsapp.com/send?text="+encodeURIComponent(url)+encodeURIComponent(text)+"&via=lopscoop")

    (3).twitter 

    推特是比较简单的,可以在网页中通过链接,推特推荐在网页版打开,所以在一些浏览器可能会隐藏到App的入口(比如Chrome)。它的链接是一个universal link,格式如下: https://twitter.com/intent/tweet?text={内容}&url={链接},注意内容链接需要用encodeURIComponent加密一下,官方文档:https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/summary

    代码如下:

    1. <meta name="twitter:card" content="summary_large_image">
    2. <meta name="twitter:title" content="Parade of Fans for Houston’s Funeral">
    3. <meta name="twitter:description" content="分享的description">
    4. <meta name="twitter:image" content="分享图片的url">
    1. //调用下面的js打开分享弹窗
    2. window.open(`https://twitter.com/share?url=${分享链接的url}`, `_blank`, `width=600, height=450, toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, top=100,left=350`)

    注意: 

    • twitter:url 标签可有可无,因为默认采用的是 https://twitter.com/share?url=${分享链接的url} 中的url,url地址禁止携带参数,即 https://test.com/index.htm?key=search错误,若确实需要,请将参数放到目录层级中,如https://testcom/search/index.htm
    • twitter:title 标签必须有,否则无法显示分享的内容
    • twitter:image 中的url地址只要能满足让爬虫爬取即可,是否携带参数都可以
    • twitter:card 标签必须有,常用的summary_large_image表示以大图的排版展示,summary以小图的形式排版展示。其他的分享如视频等,请参考官方文档
    • 因为分享的内容采用的是爬虫的形式获取,所以在html页面一开始就要存在twitter:标签,供爬虫,而不可以动态的通过js脚本追加
    • 对于动态生成html的情况,当采用的是前后端一体的方式,如.jsp、.asp、haml等形式时,在后端动态生成参数,然后传递给前端页面即可
    • 对于前后端分离的情况,需要后端配合动态生成html页面
    • 对于分享的链接能否正常显示,可以通过Twitter分享调试器进行调试,并查看结果

    (4).Telegram

    仅支持分享到App端和桌面端:https://t.me/share?url={链接}&text={内容},也是url schema的方式

  • 相关阅读:
    WMS仓储管理系统的主要类型及其特性和适用场景
    java学习之git的基本使用
    商业智能系统的主要功能包括数据仓库、数据ETL、数据统计输出、分析功能
    网络编程:多进程实现TCP服务端并发、互斥锁代码实操、线程理论、创建线程的两种方式、线程的诸多特性、GIL全局解释器锁、验证GIL的存在
    数据结构与算法-栈和队列小练习
    R语言绘制分组方框图三
    《011.SpringBoot之餐厅点餐系统》
    Flink—读Hive表数据写入Kafka
    MBR分区表的简介
    java毕业设计“小蜜蜂”校园代取快递系统mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/zhoupenghui168/article/details/133298326