22 Star 202 Fork 49

MagicalProgrammer / js-screen-shot

 / 详情

cdn引入的方式使用截图是空白

待办的
创建于  
2023-06-05 21:15

Version of js-screen-shot

1.9.7

Operating system and its version

Browser and its version

Sandbox to reproduce

代码放到富文本里边了

What happened?

<title>Document</title> <script src="./dist//screenShotPlugin.umd.js"></script> <script src="./jquery-1.7.1.js"></script> <style>
</style>
 
<button onclick="jitT()">截图</button>
<canvas id="loadingbar" ></canvas> 
<iframe height="1000px" width="500px" style="z-index:10000" src="./1111.pdf"></iframe>
<script>
var uploadlist = []
var imageFilelist =[]
function jitT(){

    const screenShotHandler = new screenShotPlugin({
    enableWebRtc: false,  //是否显示选项框
    level:99,  //层级级别
    completeCallback: this.callback,
    closeCallback: this.closeFn,
    });

    
}

/**
 * 根据图片生成画布
 */
 function convertImageToCanvas(image) {
  var canvas = document.createElement("canvas");
  canvas.width = image.width;
  canvas.height = image.height;
  canvas.getContext("2d").drawImage(image, 0, 0);
  return canvas;
}
/**
 * 生成图片
 * 截图确认按钮回调函数
 */
function callback(base64data) {
    var image = new Image();	
    image.src = base64data;
    image.onload = () => {
      var canvas = convertImageToCanvas(image);
      var url = canvas.toDataURL("image/jpeg");
      // 在页面展示的数组,次数组是要把截图成功后的图片在页面上展示出来的数组,可以根据自己项目的需求进行添加
      uploadlist.push({image:url})
      for(var i=0;i<uploadlist.length;i++){
        if(uploadlist.length>=6){
          uploadhide=false;
        }
      }
	 console.log(url)

      var bytes = window.atob(url.split(",")[1]);  //通过atob将base64进行编码
      //处理异常,将ASCII码小于0的转换为大于0,进行二进制转换
      var buffer = new ArrayBuffer(bytes.length);
      var uint = new Uint8Array(buffer);  //生成一个8位数的数组
      for (var i = 0; i < bytes.length; i++) {
        uint[i] = bytes.charCodeAt(i);  //根据长度返回相对应的Unicode 编码
      }
      //Blob对象
      var imageFile= new Blob([buffer], { type: "image/jpeg" }); //type为图片的格式
	 
      // 给后台返回的数组,我的项目需求是要截图多张上传给后端的,如果只上传一张直接就上传imageFile上一句就行,这个数组可以跟根据自己的需求进行编写
      imageFilelist.push(imageFile);
	  console.log(imageFile)
  };  
}
</script>

报错信息


评论 (4)

user_5180309 创建了任务
user_5180309 添加了
 
bug
标签
展开全部操作日志

html2canvas模式不支持截取iframe的,webrtc模式是没问题的。

webrtc模式这个会多一个分享的步骤,额..还有什么能解决的吗,或者还有啥子插件吗大佬

这个分享步骤是浏览器的行为,禁用不了,目前没有什么更好的插件了。

适用于CDN图片截图空白

  1. cdn图片设置跨域 (后端配置)
  2. 把url转成base64 然后就可以了
 <canvas ref="canvasBox"></canvas>
    url2Base64(url) {
      return new Promise((resolve, reject) => {
        let img = new Image();
        let canvas = this.$refs.canvasBox;
        let w = this.$refs.canvasView.offsetWidth;
        let h = this.$refs.canvasView.offsetHeight;
        img.crossOrigin = "*";
        let type = "image/jpeg";
        img.onload = function () {
          canvas.width = w;
          canvas.height = h;
          const ctx = canvas.getContext("2d");
          ctx.fillStyle = "white";
          ctx.fillRect(0, 0, w, h);
          ctx.drawImage(img, 0, 0, w, h);
          const base64 = canvas.toDataURL(type);
          // console.log(222, base64);
          resolve(base64);
        };
        img.onerror = function () {
          reject(new Error("message"));
        };
        img.src = url;
      });
    },

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
2087633 likai119 1585270796 1941521 gs code 1578962812
TypeScript
1
https://gitee.com/likai119/js-screen-shot.git
git@gitee.com:likai119/js-screen-shot.git
likai119
js-screen-shot
js-screen-shot

搜索帮助

344bd9b3 5694891 D2dac590 5694891