refresh date: 2026-09-25 robots: noindex
Описание
Используйте chrome.tabCapture API для взаимодействия с медиапотоками вкладок.
Разрешения
tabCaptureОбзор
API chrome.tabCapture позволяет получить доступ к MediaStream, содержащему видео и аудио текущей вкладки. Его можно вызвать только после того, как пользователь запустит расширение, например нажав кнопку действия. Это похоже на поведение разрешения activeTab.
Сохранение системного аудио
Когда для вкладки получен MediaStream, аудио на ней больше не воспроизводится. Это похоже на поведение функции getDisplayMedia(), когда для флага suppressLocalAudioPlayback задано значение true.
Чтобы продолжить воспроизведение аудио, используйте следующее:
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
При этом создается новый объект AudioContext, а аудио из объекта MediaStream вкладки подключается к месту назначения по умолчанию.
Идентификаторы потоков
Вызов chrome.tabCapture.getMediaStreamId возвращает идентификатор потока. Чтобы позже получить доступ к MediaStream по идентификатору, используйте следующий код:
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
Ограничения на использование
После вызова getMediaStreamId() на использование возвращенного идентификатора потока накладываются ограничения:
- Если указан параметр
consumerTabId, идентификатор может использоваться вызовомgetUserMedia()в любом фрейме на вкладке с тем же источником. - Если правило не настроено, то, начиная с Chrome 116, идентификатор можно использовать в любом фрейме с тем же источником безопасности в том же процессе рендеринга, что и вызывающий объект. Это означает, что идентификатор потока, полученный в сервис-воркере, можно использовать в закадровом документе.
До выхода Chrome 116, если параметр consumerTabId не был указан, идентификатор потока ограничивался источником безопасности, процессом отрисовки и фреймом отрисовки вызывающего объекта.
Подробнее…
Подробнее о том, как использовать API chrome.tabCapture, рассказывается в статье Запись аудио и захват экрана. В нем показано, как использовать tabCapture и связанные API для решения ряда распространенных задач.
Типы
CaptureInfo
Свойства
-
полноэкранный режим
Логическое значение
Указывает, находится ли элемент на записываемой вкладке в полноэкранном режиме.
-
статус
Новый статус записи вкладки.
-
tabId
число
Идентификатор вкладки, статус которой изменился.
CaptureOptions
Свойства
-
аудио
Логическое значение (необязательно)
-
audioConstraints
MediaStreamConstraint необязательно
-
видео
Логическое значение (необязательно)
-
videoConstraints
MediaStreamConstraint необязательно
GetMediaStreamOptions
Свойства
-
consumerTabId
number (необязательно)
Необязательный идентификатор вкладки, которая позже вызовет
getUserMedia()для использования потока. Если не указано, то результирующий поток может использоваться только вызывающим расширением. Поток может использоваться только фреймами на вкладке, источник безопасности которой совпадает с источником вкладки-потребителя. Источник вкладки должен быть безопасным, например HTTPS. -
targetTabId
number (необязательно)
Необязательный идентификатор вкладки, которая будет записана. Если не указано, будет выбрана текущая активная вкладка. В качестве целевой можно использовать только вкладку, для которой расширению предоставлено разрешение
activeTab.
MediaStreamConstraint
Свойства
-
обязательно
Объект
-
необязательно
Объект (необязательно)
TabCaptureState
Перечисление
"pending"
"active"
"stopped"
"error"
Методы
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
Захватывает видимую область активной вкладки. Запись можно начать только на активной вкладке после вызова расширения, как и в случае с activeTab. Запись сохраняется при навигации по страницам на вкладке и прекращается, когда вкладка закрывается или расширение останавливает медиапоток.
Параметры
-
Параметры
Настраивает возвращаемый медиапоток.
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(stream: LocalMediaStream) => void
-
Поток
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
): Promise<CaptureInfo[]>
Возвращает список вкладок, для которых запрошена запись или которые записываются, то есть статус не равен "остановлено" и "ошибка". Это позволяет расширениям сообщать пользователю о том, что запись вкладки уже выполняется и новую начать нельзя (или предотвращать повторные запросы для одной и той же вкладки).
Параметры
-
обратный вызов
function необязательно
Параметр
callbackвыглядит следующим образом:(result: CaptureInfo[]) => void
-
Результат
-
Возвраты
-
Promise<CaptureInfo[]>
Chrome 116 и более поздних версийВозвращает объект Promise, который распознается с помощью CaptureInfo[] для записанных вкладок.
Объекты Promise поддерживаются только в Manifest V3 и более поздних версиях. На других платформах нужно использовать обратные вызовы.
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
): Promise<string>
Создает идентификатор потока для захвата целевой вкладки. Похож на метод chrome.tabCapture.capture(), но возвращает вкладке-потребителю идентификатор медиапотока, а не сам поток.
Параметры
-
Параметры
GetMediaStreamOptions необязательный
-
обратный вызов
function необязательно
Параметр
callbackвыглядит следующим образом:(streamId: string) => void
-
streamId
string
-
Возвраты
-
Promise<string>
Chrome 116 и более поздних версийВозвращает объект Promise, который распознается с результатом. В случае успеха результатом будет непрозрачная строка, которую можно передать в API
getUserMedia(), чтобы сгенерировать медиапоток, соответствующий целевой вкладке. СозданныйstreamIdможно использовать только один раз. Если он не будет использован, то через несколько секунд срок его действия истечет.Объекты Promise поддерживаются только в Manifest V3 и более поздних версиях. На других платформах нужно использовать обратные вызовы.
События
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
Событие, которое активируется при изменении статуса записи вкладки. Это позволяет авторам расширений отслеживать статус записи вкладок, чтобы синхронизировать элементы интерфейса, например действия на странице.
Параметры
-
обратный вызов
function
Параметр
callbackвыглядит следующим образом:(info: CaptureInfo) => void
-
информация
-