Проблемы с доступом к функции расширения Google из другого расширения - PullRequest
0 голосов
/ 20 декабря 2018

Как гласит заголовок, возможно ли получить доступ к методам, определенным в расширении Google, из другого расширения Google?Метод, к которому я пытаюсь получить доступ, может быть вызван из консоли Google, однако, когда я пытаюсь получить доступ к методу с фоновой страницы со следующим кодом

chrome.tabs.executeScript(ns.tracsCopyFromTabId, {
            code: "alert(methodName)"  
        }

, он выдает мне следующую ошибку:

Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome-extension:// URL of different extension

Я полагаю, что метод, к которому я пытаюсь получить доступ, определен в их контент-скрипте?Кто-нибудь когда-нибудь пытался и успешно это сделал?

1 Ответ

0 голосов
/ 20 декабря 2018

Ошибка

Ошибка + ваш комментарий о том, что вам не нужно менять контекст, означает, что вы , вероятно, не на самом деле вводите на обычной веб-странице, которая запускаетсяскрипты контента, но на страницу расширения (с видимым URL chrome-extension://...).

Все на такой странице не скрипт контента по определению.Даже если этот код также используется совместно со сценарием содержимого, используемым где-то еще.

Обратите внимание, что если вы используете (но не показывает) allFrames: true для инъекции, вы можете случайно сделать инъекциюв рамке страницы расширения, что приводит к этой ошибке.

Код сценария без содержания

Проблема в том, что вы не можете объявить разрешения хоста для chrome-extension:// страниц.Поэтому вы не можете внедрить скрипты содержимого в эти страницы.

Невозможно определить разрешения для этого только из расширения (чтобы создать расширение, вы можете распространять это «просто работает»), но вы можете сделатьлокально с флагами Chrome + chrome.debugger API .

Вам нужно будет включить chrome://flags/#silent-debugger-extension-api и использовать протокол отладчика для выполнения вашего кода.

К сожалению, флаг chrome://flags/#extensions-on-chrome-urls также не позволяет вводить данные в этот протокол, поэтому у вас есть для использования отладчика.

Код сценария содержимого

Есливы на самом деле пытаетесь найти код в скрипте контента на обычной веб-странице, вы не можете вызвать его из своего собственного скрипта контента, потому что каждое расширение получает свой собственный изолированный контекст JS.

Вам потребуется chrome.debugger снова.

Код, вставленный в контекст страницы

Иногда вы имеете дело с кодом, который внедряется в саму веб-страницу из скрипта содержимого .

Тогда вы должны быть в состоянииСделайте это с помощью описанного вами метода, выполнив тот же скрипт содержимого -> скачок кода страницы.См. Ссылку выше.

Это не объясняет ошибку, которую вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...