google chrome扩展的javascript屏幕截图
我目前正在构建一个GoogleChrome扩展,它从不同页面获取多个屏幕截图,并将它们发布到一个端点上。 我遇到的问题是时间不准确。我的意思是,屏幕截图在页面停止加载之前就被截取得太早了。第二,我只收到链接类型WE的第二个屏幕截图(不是类型PA的第一个),好像动作太快了,只是跳过了PA。我对JS不是很在行,如果有人有如何改进代码的建议,我洗耳恭听。多谢各位 background.jsgoogle chrome扩展的javascript屏幕截图,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我目前正在构建一个GoogleChrome扩展,它从不同页面获取多个屏幕截图,并将它们发布到一个端点上。 我遇到的问题是时间不准确。我的意思是,屏幕截图在页面停止加载之前就被截取得太早了。第二,我只收到链接类型WE的第二个屏幕截图(不是类型PA的第一个),好像动作太快了,只是跳过了PA。我对JS不是很在行,如果有人有如何改进代码的建议,我洗耳恭听。多谢各位 background.js var id = 100; var currentObject; var myTimer; function
var id = 100;
var currentObject;
var myTimer;
function wait()
{setTimeout(wait, 1000);}
chrome.browserAction.onClicked.addListener(
function fireTimer() {
localStorage["allLocations"] = JSON.stringify([{
'type': 'PA',
'url': 'https://app.powerbi.com/groups/me/reports/ReportSection2?chromeless=true'
},
{
'type': 'WE',
'url': 'https://app.powerbi.com/groups/me/reports/ReportSection?chromeless=true'
}]);
myTimer = setInterval(fireScreenshots, 1*60*1000);
});
function fireScreenshots(){
var allLocations = JSON.parse(localStorage["allLocations"]);
allLocations.forEach( function (arrayItem)
{
if (arrayItem.type != undefined && arrayItem.url != undefined){
retrieveWebPage(arrayItem)
}
});
}
function retrieveWebPage(data){
currentObject = data;
chrome.tabs.update({
url: currentObject.url
});
chrome.tabs.onUpdated.addListener(function updatedListener(tabId , info) {
chrome.tabs.onUpdated.removeListener(updatedListener);
if (info.status == 'complete' && currentObject != undefined) {
chrome.tabs.captureVisibleTab(null, {format: "jpeg", quality: 100}, function(screenshotUrl) {
var xhr = new XMLHttpRequest() , formData = new FormData();
formData.append("image", screenshotUrl);
formData.append("dashboard_type", currentObject.type);
xhr.open("POST", "http://intranet/api/powerbi/screenshots_upload/");
xhr.send(formData);
});
}
});
}
奇怪的是,验证
info.status==“complete”
不足以知道页面已加载
1秒钟的超时可能是问题的临时解决方案。可能是您正在加载的网页中的某些脚本正在进行更新/显示网页的工作,即使DOM已完成加载(尤其是在SPAs类型的应用程序中)
wait
函数的作用是什么?因为即使您在代码中的某个地方调用了它,它也不会做任何事情。它根本不会做任何事情,我在上一次尝试中试图延迟一些事情。现代网页使用脚本构建自己,这发生在DOM加载/完成事件之后。最简单的解决方案是将captureVisibleTab代码封装在setTimeout中大约10000毫秒。您能提交解决方案吗?相关:感谢您的解释,太棒了!
setTimeout(function() {
chrome.tabs.captureVisibleTab(null, {format: "jpeg", quality: 100}, function(screenshotUrl) {
var xhr = new XMLHttpRequest() , formData = new FormData();
formData.append("image", screenshotUrl);
formData.append("dashboard_type", currentObject.type);
xhr.open("POST", "http://intranet/api/powerbi/screenshots_upload/");
xhr.send(formData);
});
}, 1000);