#permissions #screenshot
#разрешения #снимок экрана
Вопрос:
Я работаю над расширением браузера для React DOM. Это расширение имеет пользовательский интерфейс «Профилировщик», который измеряет производительность рендеринга для компонентов React. Недавно я добавил снимки экрана в этот профилировщик, чтобы он мог показывать изображения DOM каждый раз, когда React обновляет его.
Для этого расширение вызывает chrome.tabs.captureVisibleTab
в ответ на запрос из пользовательского интерфейса расширения DevTools. (Этот запрос выполняется каждый раз, когда React фиксирует изменения в DOM.)
На данный момент мне потребовалось <all_urls>
разрешение, основанное на документации для этого API, в которой говорится:
У вас должно быть
<all_urls>
разрешение на использование этого метода. (С другой стороны, Chrome разрешает использование этого метода сactiveTab
разрешения и соответствующим жестом пользователя).
(В документации Chrome для этого API не упоминается ни один из способов.)
По моему опыту, я могу захватывать экран после обновлений, вызванных, например, щелчком по элементу привязки. Однако другие типы обновлений (например, события «прокрутки», программный вызов click()
элемента) завершаются сбоем со следующей ошибкой, регистрируемой в фоновом сценарии:
Непроверенная среда выполнения.Последняя ошибка: не удается получить доступ к содержимому URL «». Манифест расширения должен запрашивать разрешение на доступ к этому хосту.
Является ли документация неверной в отношении этого API? Я неправильно определил свои разрешения? Буду признателен за любую помощь!
Комментарии:
1. Я немного смущен тем, что это работает для событий «click», учитывая, что это не работает, например, для событий «scroll». (Поскольку
postMessage
промежуточные вызовы являются асинхронными, я бы не ожидал, что браузер свяжет снимок экрана с предыдущим событием click …)2. Похоже, это как-то связано с фокусом. Если я нажму, затем прокрутю окно, я смогу сделать скриншоты страницы. Если я прокручиваю, например, с помощью трековой панели, сосредоточившись на панели DevTools, я не могу их захватить.