【js】setInterval是个坑!chrome定时截图保存实现

chrome定时保存技术点:
1 网页截图
利用chrome API实现,参考:开发文档(中文版)
连接中有测试截图扩展的例子,主要用到的chrome.browserAction.onClicked,chrome.tabs.captureVisibleTab等方法

(官方文档:https://developer.chrome.com/extensions/getstarted)

2 图片保存到本地
用链接< a >的download属性,HTMLevent实现图片下载到本地,通过设置chrome默认下载路径来实现自动下载。
参考链接:http://www.jb51.net/article/47723.htm

!注意:
src=”data:image/gif;base64,R0lGOXXXXX” ,链接中提供的方法的content参数是指分号后的内容,所以要下图片的话直接用aLink.href = “data:image/gif;base64,R0lGOXXXXX”的完整路径。

代码如下:

function downloadFile(fileName, url) {
  var self = this;
  var aLink = document.createElement('a');
  var evt = document.createEvent("HTMLEvents");
  evt.initEvent("click", false, false);
  aLink.download = fileName;
  aLink.href = url;
  aLink.dispatchEvent(evt);

  // 延迟关闭下载页面
  setTimeout(function() {
    self.window.close();
  }, 5000);
}

3 定时执行(时间间隔)

!!!一定不要用setInterval()!!!简直是个坑,出各种问题。。让人心力交瘁QAQ
用嵌套的setTimeout来代替实现比较可控,下面是模板框架:

var flag = false;
var interval = 1000;

chrome.browserAction.onClicked.addListener(() => {
  start();
});

function start() {
  flag = true;
  loop();
}

function stop() {
  flag = false;
}

function loop() {   //记住要判断三遍!
  if (flag) {
    realFunc().then(() => {
      if (flag) {
        setTimeout(() => {
          if (flag) {
            loop();
          }
        }, interval);
      }
    });
  }
}

function realFunc() {
  return new Promise((resolve, reject) => {
    console.log("doing");
   setTimeout(() => {   //异步
     console.log("done");
     resolve();
   }, 2000);
  });
}

完整插件代码:
https://github.com/xn11/Timing-screenshot

posted on 2021-05-11 10:30  漫思  阅读(396)  评论(0编辑  收藏  举报

导航