biaov
biaov
  • 发布:2019-10-28 10:18
  • 更新:2022-04-14 19:47
  • 阅读:18032

uni-app在APP端实现截屏分享功能

分类:uni-app

目标

点击分享按钮,截取APP屏,在分享到第三方,如微信,朋友圈。

截屏

方法一:html2canvas.js

  • 这种方法需要获取DOM节点,app端获取不到。如果可以获取DOM节点,可以尝试使用此方法。

方法二:5+api

let pages = getCurrentPages();  
let page = pages[pages.length - 1];  
let ws = page.$getAppWebview();  
let bitmap = new plus.nativeObj.Bitmap('drawScreen');  
// 将webview内容绘制到Bitmap对象中  
ws.draw(bitmap, () => {  
  // 保存图片到本地  
  bitmap.save("_doc/drawScreen.jpg", {  
    overwrite: true  
  }, res => {  
    console.log(res.target); // 图片地址  
    bitmap.clear(); // 清除Bitmap对象  
  }, error => {  
    console.log(JSON.stringify(error)); // 保存失败信息  
    bitmap.clear(); // 清除Bitmap对象  
  });  
  // bitmap.clear(); // 清除Bitmap对象  
}, error => {  
  console.log(JSON.stringify(error)); // 绘制失败  
}, {  
  check: true, // 设置为检测白屏  
});

注意

  • 血的教训:之前能用,后面突然发现返回的路径一直是file://null,原来是 bitmap.save和 bitmap.clear的时间差的问题,一定要把bitmap.clear放在成功回调函数或者失败函数里面。
  • 在获取本地对象时,如果使用plus.webview.currentWebview()获取本地对象,有可能截屏时出现黑屏现象。
let ws= plus.webview.currentWebview();
  • 在APP端使用app端获取方法
// 因为这里只做app端,所以没有加上条件编译,如果多端的话加上APP的条件编译  
let pages = getCurrentPages();  
let page = pages[pages.length - 1];  
let ws = page.$getAppWebview();

分享

3 关注 分享
陈晨1 9***@qq.com tcec

要回复文章请先登录注册

FullStack

FullStack

uni-app 监听截屏事件和截图:https://ext.dcloud.net.cn/plugin?id=1637
2020-04-13 17:52
1***@163.com

1***@163.com

亲测可用
2020-03-31 16:54
7***@qq.com

7***@qq.com

楼主,第二种方法只能截取可视区域吗?
2020-03-19 14:07
等不到de回忆

等不到de回忆

回复 biaov :
可以了,用你这种方式可以,谢啦
2020-03-06 15:35
biaov

biaov (作者)

回复 等不到de回忆 :
在APP端是正常的,其他端没有测试,,看下你的获取本地对象是用的
let pages = getCurrentPages();
let page = pages[pages.length - 1];
let ws = page.$getAppWebview();
2020-03-04 15:05
等不到de回忆

等不到de回忆

兄弟,你这边在app的截屏能正常吗?我这边的是截屏下来是黑色的
2020-02-27 12:06