Используя WebExtensions, я пытаюсь написать скрипт контента , который бы подсчитывал количество HTTP-ответов на веб-страницу.
Я только начал изучать WebExtensions, поэтому я могу быть полностью не по пути, но до сих пор мой подход заключался в изменении фонового скрипта для прослушивания browser.webRequest.onHeadersReceived
. После запуска обратный вызов этой функции вызовет browser.tabs.sendMessage
в tabId
, откуда и был получен запрос к этому ответу.
В скрипте содержимого Я использую browser.runtime.onMessage.addListener
для прослушивания эти сообщения из фонового сценария.
При таком подходе у меня возникают две проблемы:
- Фоновый сценарий пытается отправить сообщения в сценарий содержимого даже за до скрипт содержимого начал прослушивание, что привело к ошибкам
sendMessage
и, таким образом, к потере информации. - При перезагрузке страницы некоторые сообщения из фонового скрипта принимаются до скрипта контента перезагружается, некоторые теряются (предположительно в период, когда один скрипт контента был выгружен и до запуска другого), а некоторые принимаются после.
Я искал, может ли browser.storage.local
помочь мне с этой ситуацией. С этим я могу избежать проблемы потери сообщений, просто сохраняя счет в этом хранилище.
Но у меня все еще есть проблема в фоновом скрипте, который я не знаю, увеличивать ли счетчик для сети страница, которая отображалась до перезагрузки или после (из-за проблемы № 2, описанной выше).
Я думаю, что вместо использования tabId
в качестве «указателя» на то, где количество увеличивается, имея помог бы какой-то ID
для веб-страницы, к которой относится ответ. Но я еще не смог найти ничего подобного в документации. Но опять же, я новичок в WebExtensions, так что, может быть, я упускаю совершенно другой подход.