app内嵌H5调用分享
最近产品提出了一个需求:我们在合作方的app中提供的部分页面中增加分享页面,具体要求是在3个二维码推广页面调用app的分享接口,分享方式有3种,分别是点击”分享链接“按钮调起分享,点击”分享图片“按钮调起分享,以及长按保存页面。
二维码的推广页面是由一张背景图和一张动态生成的二维码图片组成。
点击”分享链接“调起分享非常简单,就不再赘述了。
点击”分享图片“按钮进行分享,合作方app接口要求传入进行分享的图片地址。这就要求分享出去的图片先要存在图片服务器中,但是每个用户的分享二维码是不同的,我们不可能为每个用户画一张分享图片,再存到服务器中。经过一番搜索,最终决定由前端对分享页面截图,上传服务器,再把返回的图片地址传给app。
前端截图主要用到2个库,html2canvas 和canvas2image。顾名思义,先把页面元素输出到canvas上,再把canvas转成图片上传到服务器。
function createPicture() {
var shareButton = document.querySelector(".share-button"); // 获取不希望出现在截图中的DOM,然后隐藏,等图片生成完毕,再恢复显示
var tip = document.querySelector(".tip");
shareButton.style.display = "none";
tip.style.display = "none";
html2canvas(document.body).then(function (canvas) {
var img = Canvas2Image.convertToPNG(canvas, canvas.width, canvas.height);
var base64 = img.src;
var byteString = atob(base64.split(",")[1]); //base64 解码
var arrayBuffer = new ArrayBuffer(byteString.length); //创建缓冲数组
var intArray = new Uint8Array(arrayBuffer); //创建视图
for (var i = 0; i < byteString.length; i++) {
intArray[i] = byteString.charCodeAt(i);
}
var b = new Blob([intArray], {type: "image/png"});
b.lastModifiedDate = new Date();
b.name = Date.now() + ".png";
var file = new FormData();
file.append("upfile", b, b.name);
shareButton.style.display = "flex";
tip.style.display = "flex";
return file;
});
}// 函数返回一个文件对象,把文件对象上传服务器即可
”长按保存“的原理也类似,首先背景图和二维码都需要是dom元素的background-image,因为移动端H5是没有长按事件的,所以使用touch事件模拟。如果把把背景图、二维码图设为img标签,再app也设定捕获屏幕的长按事件的情况下,H5页面捕获touch事件同时,app也会捕获长按事件,造成调起2次事件处理。设为background-image可以避免app捕获长按事件。长按保存的具体原理是,touchstart事件处理函数:调用setTimeout设定1-2秒后调用截图函数并上传服务器,并把返回的图片地址传给app,touchmove,touchend事件处理函数:使用clearTimeout取消定时器。这样只有一直按着不动,经过预定的时间后,调起真正的时间处理函数,手指移动或者离开屏幕清除定时间,真正的事件处理函数不会执行。
app内嵌H5调用分享的更多相关文章
- 移动端开发利器vConsole.js,app内嵌H5开发时调试用
vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板,主要还是用于内嵌app页面时在手机上进行调试,打印完全和在PC端一样,方便大家找出问题所在. 不说废话直接进入主题,vConsol ...
- app内嵌h5分享到小程序分享功能
if (this.GLOBAL.env !== 'production') { try { window.JSBridge.shareMiniProgramToWx('https://www.lexi ...
- app内嵌H5网页(webviewJavaScriptBridge)
摘要:使用的插件为webviewJavaScriptBridge,app端需要引入一下这个包,html页面只需一段JS代码 与IOS交互 <! 申明交互(此处代码固定) > functio ...
- ios下app内嵌h5页面是video适配问题
ios下做新闻详情用h5页面实现然后打包到app中,其中新闻详情页会有视频,安卓下video的poster可以做到适应video大小,但是ios下会按照poster图片大小将video等比撑大,但是视 ...
- app内嵌H5的上传图片的功能
1.上传组件 <!-- - hasBorder {Boolean} cell底部边框,oneline 为 true 有效 - inlineBorder {Boolean} cell底部短边框 - ...
- app内嵌h5页面在ios手机端滑动卡顿的解决方法
1.带滚动条的dom需加样式 -webkit-overflow-scrolling: touch;2.去掉 width:100%; height:100%
- app内嵌 h5页面 再滑动的时候 触发击穿底下的一些touchstart事件
我们的目的是再滑动的时候 不要触发到touchstart事件. // 再滑动的时候无法点开视频 var is_scroll_start,is_scroll_end; $(window).on({ 't ...
- APP内的H5页面测试方法, 移动端的浏览器(例如UC浏览器)测试方法
前言: 用appium做UI自动化,测试APP里面的H5和测试手机浏览器打开的H5的操作流程上是有所区别的.比如要测试APP内嵌的H5需要先操作appium启动APP,然后通过context切到web ...
- APP中内嵌H5页面为什么不能下载?
在APP中内嵌H5页面,若页面上存在下载链接,没有任何反应,为什么呢? 原因是app中内嵌的H5页面是WebView解析的,什么是WebView呢? 在Android手机中内置了一款高性能webkit ...
随机推荐
- bzoj 5120: [2017国家集训队测试]无限之环【最小费用最大流】
玄妙的建图-- 这种平衡度数的题按套路是先黑白染色然后分别连ST点,相邻格子连黑向白连费用1流量0的边,然后考虑费用怎么表示 把一个点拆成五个,上下左右中,中间点黑白染色连ST, 对于连S的点,中点连 ...
- [Xcode 实际操作]三、视图控制器-(1)使用UIScrollView展示多个视图可控制器
目录:[Swift]Xcode实际操作 本文将演示使用滚动视图创建多个页面. [Create a new Xcode project]->[Single View App]->[Next] ...
- [Xcode 实际操作]九、实用进阶-(23)多个Storyboard故事板中的页面跳转
目录:[Swift]Xcode实际操作 本文将演示多个Storyboard故事板中的页面跳转. 使用快捷键[Command]+[N]创建一个新的故事板文件. (在项目文件夹[DemoApp]上点击鼠标 ...
- Metabolic and gut microbial characterization of obesity-prone mice under high-fat diet (文献分享一组-赵容丽)
题目:高脂饮食下易肥胖小鼠的代谢和肠道微生物特性研究 Metabolic and gut microbial characterization of obesity-prone mice under ...
- 一个Java语言所写的shop网站框架明细
核心框架Spring Framework :作为一个优秀的开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用 ...
- with rollup
实验吧的一道ctf题,这两天无聊,做做ctf题.在实验吧被一道也题卡了好久. 页面很简单就是一个登陆页面,按照之前的经验觉得应该是注入吧.再看题猜测应该是绕waf之类的. 查看页面源码找到了提供的源代 ...
- centos下svn的ldap认证配置
前提:完成svn的基本安装 一.安装sasl相关组件 #yum install -y cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain 二.查看SASL版本和提供的 ...
- mouseover等闪烁问题
在使用mouseover等鼠标事件时如移动上去灰色的遮罩层高度从0到100% 在操作中发现鼠标一直在图里面但遮罩会一直变化,我感觉应该是遮罩层出现后导致鼠标离开了底层图片所以会一直变化.想起之前用的 ...
- hihocoder1068 RMQ-ST算法
思路: 这是ST表模板.遇到一道indeed笔试题需要用这个算法,顺便学习一下.那道题是说给定一个一维数组和一些查询[Li, Ri],要求计算[Li, Ri]区间内子段和的绝对值的最大值.解法是使用S ...
- Android中的Selector的使用总结
Android中的Selector主要是用来改变ListView和Button控件等其他空的默认背景,其使用方法可以如下所示: 1.首先在res目录下drawable文件夹,新建一个comm_butt ...