Vue + html2canvas截图时 不能使用跨域图片或图片不展示

本文介绍了在Vue项目中使用html2canvas进行截图时遇到跨域图片无法显示的问题,提供了解决方案,包括直接修改html2canvas源码的特定行数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue + html2canvas截图时 不能使用跨域图片的解决方案

需要修改三个地方:

1、修改源码 node_modules/html2canvas/dist/html2canvas.js

5710行和5714行

 case 2:
this.context.logger.debug("Added image " + key.substring(0, 256));
return [4 /*yield*/, new Promise(function (resolve, reject) {
  var img = new Image();
  img.onload = function () { return resolve(img); };
  img.onerror = reject;
  //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous
  if (isInlineBase64Image(src) || useCORS) {
    // img.crossOrigin = 'anonymous'; // 第一个修改的地方
    img.crossOrigin = '';
  }
  // img.src = src;  // 第二个修改的地方
  if(src.indexOf('data:image')>-1){ // 图片地址后加时间 base64图片不变
    // base64 图片操作
    img.src = src;
  }else{
    //path 图片操作
    img.src = src+"?"+new Date().getTime();
  }

  if (img.complete === true) {
    // Inline XML images may fail to parse, throwing an Error later on
    setTimeout(function () { return resolve(img); }, 500);
  }
  if (_this._options.imageTimeout > 0) {
    setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout);
  }
})];

第三个修改的地方

 html2canvas(myRef.value, {
        dpi: window.devicePixelRatio * 2,
        backgroundColor: "#fff",
        useCORS: true,   //  第三个修改的地方
        allowTaint: true, //允许跨域(默认false)
        scale: 2,
        async: true,
      }).then((canvas) => {
          state.dataImg = canvas.toDataURL("image/png",1);
          state.showImg = true
        Toast.clear()

      });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值