chrome.tabs.captureVisibleTab捕获错误的区域

时间:2017-07-07 18:16:03

标签: javascript google-chrome-extension screenshot

我正在尝试创建Chrome扩展程序,它将截取大页面的屏幕截图。

这是一个我的简单扩展,应该滚动并捕获页面的某些部分。

的manifest.json

    {

      "manifest_version": 2,
      "name": "screenshot_test",
      "version": "1.0",

      "permissions": [
        "tabs",
        "<all_urls>"
      ],

      "background": {
        "scripts": ["background.js"]
      },

      "browser_action": {
        "default_icon":  "icon.png"
      }

    }

background.js

chrome.browserAction.onClicked.addListener(capture)    
function capture(){

    function scroll(point, callback){
        chrome.tabs.executeScript({
            code: 'window.scrollTo('+JSON.stringify((point.x))+','+JSON.stringify(point.y)+')',
        }, callback)
    }

    function capturetab(){
        chrome.tabs.captureVisibleTab(function(imageUri){
            shots.push(imageUri);
        });
    }

    var shots=[];
    var points=[{x: 0, y: 0}, {x: 500, y: 500},{x: 1000, y: 1000}];

    for (var i=0; i<3; i++) scroll(points[i], capturetab);    
    console.log(shots);
}

问题在于,图像数组中的shot []包含一些相同的图像,就像capturevisibletab多次捕获相同区域一样。

在firefox中,完全相同的代码工作正常,但在firefox中,capturevisibletab返回promise并且回调不是强制性的。

1 个答案:

答案 0 :(得分:0)

您的scroll()函数假定在调用callback()之前滚动选项卡 没有这样的保证,因为API是异步的 我想它现在只适用于你,因为你的FF仍然以单进程模式运行。

在executeScript中指定callback,以便在实际执行脚本后回调它。

  function scroll(point, callback){   
    chrome.tabs.executeScript({
      code: 'window.scrollTo('+JSON.stringify((point.x))+','+JSON.stringify(point.y)+')'
    }, callback);
  }