雷峰
雷峰
  • 发布:2024-03-29 14:19
  • 更新:2024-04-19 11:08
  • 阅读:653

nvue canvas踩坑经历

分类:nvue

总结就是:用到绘制海报类似的地方(drawImage)不要用nvue。

  1. nvue 不支持普通的canvas api绘制。
  2. 然后找到了gcanvas这个东西,在iOS上还行,可以用。
  3. 然后到Android上一测,拉垮了。报错:exception function:gcanvas setBackGround for android view, exception:WX_REND大概原因就是gcanvas在安卓上绘制图像很容易各种问题,gcanvas是个第三方团队产品,uniapp官方在社区也曾说不推荐使用gcanvas。确实支持度不好。
  4. 没办法,gcanvas不能用在安卓上,只能再看看其他办法。然后采用了nvue+webview的方案,nvue使用webview加载hybrid本地html,准备用web canvas来绘制,一通操作猛如虎,嗯,安卓上能正常了
  5. 然后到iOS上一看,又拉跨了,canvas.toDataURL时报错了:the operation is insecure。翻译一下就是资源跨域问题。还奇怪呢,本地html引用的都是相对路径的本地资源,咋还会跨域,一通查一通找,发现了官方给出的解释:wkwebview环境本地资源也算跨域。好吧,没办法,那继续看看有没有办法解决吧。后面在社区里看了下发现有两种办法 1.plus.io 相关api读取为本地路径。2.本地资源转成base64。一通操作一通调试后没走通,大概原因就是1.nvue webview环境下,不能用plus api。2.本地资源转base64,大概方法也是走的原生xhr或者plus转换,但是原生xhr还有canvas.toDataURL在这种情况都是有跨域问题,plus同原因1一样,也没有支持。
  6. 最后,不纠结了,掉头吧。然后页面转为vue文件渲染。然后就ok了。

nvue这个东西官方也不维护了,虽然确实性能比vue强,但真不适合用纯nvue来做项目,巨多坑。还是见仁见智吧,合适场景下vue+nvue结合使用。

nvue+vue画布绘制并导出图片的解决方案【插件】

0 关注 分享

要回复文章请先登录注册

雷峰

雷峰 (作者)

回复 1***@163.com :
如果非要nvue上用canvas,用第5条这条方向深入研究一下,也可能完美解决。当时评估了一下,这方面太麻烦太耗时,再加上当前项目也不是纯nvue渲染,所以就直接vue解决了。
2024-04-19 11:08
雷峰

雷峰 (作者)

回复 1***@163.com :
是的,如果是纯nvue项目,canvas那真没解了,或者使用服务端生成
2024-04-19 11:05
1***@163.com

1***@163.com

我TM怀着激动的心颤抖的手终于找到答案了,看到最后竟然用vue了
2024-04-17 18:53