最新由于项目需要, 要做一键分享的交互.
分享的本质是请求其一个公开的页面. 通过参数告诉社交网站你需要分享的网页的网址,然后社交网站的爬虫会去爬取这个网址. (查了资料, 说fb,twitter都有自己的sdk,但我们只需要做比较简单的带内容的分享. 直接用html+a标签来完成. )
html body部分:
<div class="share-weibo" data-pic="shareLogo" data-title="shareTitle">
<p>Sina</p>
</div>
<div class="share-ld">
<a location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=600, height=450,top=100,left=350');void(0)">
<p>Linkedin</p>
</a>
</div>
<div class="share-fb">
<a id="fbShare" location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=600, height=450,top=100,left=350');void(0)">
<p>Facebook</p>
</a>
</div>
<div class="share-t">
<a '+encodeURIComponent('{{pageDetail.nameEn }}'),'_blank','toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=600, height=450,top=100,left=350');void(0)">
<p>Twitter</p>
</a>
</div >
社交平台根据html中的title和meta标签进行分析。 title是分享的标题, description是分享的正文....
除此之外, 还可以插入利用meta标签插入其他图片.
html meta 部分:
<!-- facebook -->
<meta property="og:title" content="shareTitle" />
<meta property="og:image" content="shareLogo" />
<meta property="og:type" content="website" />
<!-- twitter-->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" class="share_title" content="shareTitle"/>
<meta name="twitter:description" content="shareIntro" />
<meta name="twitter:site" content="@chenpeishi">
<meta name="twitter:image" content="{{pageDetail.shareLogo}}" />
og是一种新的HTTP头部标记.
用了Meta Property=og标签,意味着同意了其他网站可以引用本网页内容,目前这种协议被很多SNS网站采用。也就是所谓的富媒体对象.
og:title 标题
og:image 图片
og:type 类型,一般选择website即可
twitter:title ,des,image也是同理. 如果twitter没有,也是会获取og的数据, 只不过以防万一所以我加上一个.
----- 我是小仙女的分割版 -----
- 前端本地开发,如果我们直接用localhost:xxx + fan墙来进行分享, 能分享成功, 可社交平台会抓不到数据. 分享上去的也只能是占据地方可看不到真实内容的东西.
推文的第一部分是进行分享的url, twitter就是根据这个地址来获取数据的.
红色部分是图片, 抓不到.
图片的右侧是分享的摘要.和网址.
解决办法: 如果希望在开发环境也能查看真实效果, 可以找运维同事配置一个公网映射.
- 上线后....facebook. linkin 都能成功分享,并且能获取图片. 可twitter不行...twitter不行...不行...
明明开发环境公网映射的都能拿到图, 怎么上线了就不行了呢...
排查过程中发现: 线上环境分享的时候, 如果前部分的url替换成公网映射的地址, 图片就能分享成功.
问题来了: 公司项目的线上地址类似于:
而公网映射的地址类似于:
差别就在于: 线上是我们公司的官网, sharepro一个项目挂在官网下. 属于二级目录.
而twitter拿不到二级目录里的图片....
twitter才能爬到数据...
(真是醉了...)
因为要紧急修复上线, 所以找运维配置了一个线上的二级域名. 在twitter分享的时候, 替换成这个二级域名. 让twitter去爬图片.
<div class="share-t">
<a + document.location.pathname + window.location.search)+' '+encodeURIComponent('{{pageDetail.nameEn }}'),'_blank','toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=600, height=450,top=100,left=350');void(0)">
<p>Twitter</p>
</a>
</div >