Хотелось бы захватить изображение, возможно, неактивной вкладки.Захват (скриншот) неактивной вкладки
Проблема в том, что при использовании подхода, отображаемого здесь, вкладка часто не получает времени на загрузку до завершения захвата, что приводит к сбою.
Обратный вызов chrome.tabs.update()
выполняется до того, как вкладка может быть захвачена.
Я также попытался добавить слушателей к таким событиям, как tabs.onActivated
и tabs.onHighlighted
, и сделать захват, когда они уволены, но результат тот же. И, как указано этим, я также попробовал highlighted
вместо active
на chrome.tabs.update()
- и комбинация обоих; с прослушивателями и обратными вызовами.
Единственный способ заставить его работать частично лучше, используя setTimeout()
, но это очень хакерский, не надежный и уродливый. Тот факт, что нужно активировать вкладку перед захватом, несколько шумный - но если нужно добавить задержки, проблема будет несколько хуже.
Это больше похоже на функцию удобства для моего расширения, но было бы неплохо заставить ее работать.
/* Not the real code, but the same logic. */
var request_tab = 25,
request_win = 123
old_tab;
/* Check which tab is active in requested window. */
chrome.tabs.query({
active : true,
windowId : request_win
}, function (re) {
old_tab = re[0].id;
if (old_tab !== request_tab) {
/* Requested tab is inactive. */
/* Activate requested tab. */
chrome.tabs.update(request_tab, {
active: true
}, function() {
/* Request capture */ /* CB TOO SOON! */
chrome.tabs.captureVisibleTab(request_window, {
format : 'png'
}, function (data) {
/* ... data ... */
/* Put back old tab */
chrome.tabs.update(old_tab, {
active: true
});
})
});
} else {
/* Requested tab is active. */
/* Request capture. */
chrome.tabs.captureVisibleTab(request_window, {
format : 'png'
}, function (data) {
/* ... data ... */
})
}
});
Спасибо за вход. У меня есть слушатели на всех вкладках, и только один из них - «onActivated» и «onHighlighted». Событие 'onUpdated' не запускается. Статус вкладки (с помощью tabs.get() 'или' tabs.query() ') показывает статус как« полный »и т. Д. Я не могу перезагрузить страницу. – user3342816
Вы также говорите * «С тех пор вы обновляете вкладку с помощью' chrome.tabs.update() '[...]" * - есть ли другие способы сделать это? (Кроме того, просить пользователя сделать это ...: P) – user3342816
@ user3342816 AFAIK, нет других способов сделать вкладку активной. Кстати, я не знаю, можете ли вы поймать какое-то событие, которое сообщит вам, что вкладка готова к захвату ... Я ищу решение в документации ... –