Скрипты содержимого имеют ограниченный доступ к API Chrome. Этот доступ не включает API, который вы пытаетесь использовать (например, chrome.tabs
). Если вам нужно использовать этот API, вам нужно будет сделать это в фоновом скрипте 1.
Как указано в документации к скрипту в Chrome , API, доступный для скрипта содержимого: [Я разместил устаревшие методы в формате strikethrough]:
blockquote>
- extension ( getURL , inIncognitoContext , lastError , onRequest , sendRequest )
- i18n
- время выполнения ( connect , getManifest , getURL , id , onConnect , onMessage , sendMessage )
- storage
Пара перечисленных API устарела и была на некоторое время. Те, которые устарели, переместились в разные места (также перечисленные выше):
extension.onRequest
➞runtime.onMessage
extension.sendRequest
➞runtime.sendMessage
Если он официально не устарел,
extension.lastError
также доступен какruntime.lastError
. На этом этапе его обычно называют в этом месте:
extension.lastError
➞runtime.lastError
Разделите свой расширение в фоновые скрипты и скрипты содержимого
Вам нужно будет отделить свой код от того, что должно быть в фоновом скрипте и что должно быть в сценариях контента, на основе возможностей, доступных для каждого типа скрипт. Скрипты содержимого имеют доступ к DOM веб-страницы, на которую они вводятся, но ограниченный доступ к API расширений. Фоновые сценарии имеют полный доступ к API расширений, но не имеют доступа к содержимому веб-страницы. Вы должны прочитать обзор расширений Chrome Chrome и связанные с ним страницы, чтобы понять, какая функциональность должна располагаться в том типе сценария.
для связи между вашими сценариями контента и фоновыми скриптами. Для этого вы можете использовать передачу сообщений . Это позволяет вам передавать информацию между двумя сценариями для выполнения действий, которые невозможны, используя только один тип скрипта. Например, в вашем скрипте содержимого вам может понадобиться информация, доступная только из одного из других API Chrome, или вам нужно что-то, что может быть выполнено (или только) с помощью одного из других API расширения Chrome. В этих случаях вам понадобится отправить сообщение в фоновый скрипт, используя
chrome.runtime.sendMessage()
, чтобы сказать, что нужно сделать, при этом обеспечивая достаточную информацию для него чтобы иметь возможность сделать это. Затем ваш фоновый скрипт может вернуть желаемую информацию, если она есть, в ваш скрипт содержимого. В качестве альтернативы вы будете иметь время, когда обработка будет в основном выполняться в фоновом скрипте. Фоновый сценарий может вводить сценарий содержимого или просто сообщение уже введенного сценария, получать информацию со страницы или вносить изменения в веб-страницу.
- Фоновый скрипт означает любой скрипт то есть в фоновом контексте. В дополнение к фактическим
background
скриптам , это включает всплывающие окна и страницы опций и т. Д. Однако единственная страница, на которой вы можете быть уверены, что она всегда доступна для приема сообщений из сценария контента, является вашей фактическойbackground
скриптов , определенных в manifest.json . Другие страницы могут быть доступны в некоторых случаях в результате взаимодействия пользователя с браузером, но они недоступны последовательно.Этот ответ был перемещен из дублирующего вопроса , а затем модифицировано.