我正在尝试创建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并且回调不是强制性的。
答案 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);
}