Получение tabId -1 в onBeforeRequest в расширении Chrome

#google-chrome-extension

#google-chrome-extension

Вопрос:

В моем расширении Chrome я слушаю onBeforeRequest и есть загадка с одним доменом: https://www.vinyl-digital.com /

Проблема: tabId === -1 вместо действительного идентификатора вкладки в прослушивателе. Также type === xmlhttprequest появляется, хотя это определенно не запрос XHR:

 chrome.webRequest.onBeforeRequest.addListener()

frameId: -1
initiator: "https://www.vinyl-digital.com"
method: "GET"
parentFrameId: -1
requestId: "586533"
tabId: -1
timeStamp: 1554487869165.11
type: "xmlhttprequest"
url: "https://www.vinyl-digital.com/"
  

Я хотел бы знать возможную причину этого -1 и как начать получать действительные идентификаторы.

Чтобы воспроизвести это, я создал новый профиль Chrome, добавил свое расширение, на новой вкладке ввел URL-адрес и нажал Enter. Первый и единственный раз, когда tabId является допустимым (!) числом. Во всех остальных случаях я получаю -1 и «xmlhttprequest».

Chrome 73.0.3683.86 (официальная сборка) (64-разрядная версия) Win 7

Комментарии:

1. При первом посещении сайта установите service worker, который обрабатывает последующие запросы и выдает XHRS из своего контекста, который не является вкладкой, поэтому идентификатор равен -1 в соответствии с документацией WebRequest.

2. @wOxxOm Ваша помощь, как всегда, ценна, спасибо! Я приму ваш ответ, как только вы его добавите.

Ответ №1:

При первом посещении сайта установите service worker (вы можете увидеть его в devtools -> Вкладка приложения), который обрабатывает последующие запросы и выдает XHRS из своего контекста, который не является вкладкой, поэтому идентификатор -1 соответствует документации WebRequest:

tabId : Идентификатор вкладки, на которой выполняется запрос.
Установите значение -1, если запрос не связан с вкладкой.

Комментарии:

1. Возможно ли узнать, с какого сайта / вкладки был запущен service worker? Без знания источника запроса вряд ли возможно применить многие требуемые алгоритмы в onBeforeRequest.