tabs.executeScript встречает ReferenceError при доступе к функции, определенной в скрипте содержимого - PullRequest
0 голосов
/ 04 марта 2019

Обновление : Кажется, проблема в том, что Webpack выполняет каждый модуль в своей собственной функции, что означает, что никакие модули не могут существовать в глобальной области видимости.Есть ли какой-нибудь элегантный способ решить эту проблему, чтобы я мог определить функцию в сценарии содержимого, упакованного в Web, и получить к нему доступ из другого сценария содержимого?

Оригинал :

в моем основном скрипте контента Я определяю функцию

function foo() {
    console.log("foo")
}

В моем background.js я внедряю новый скрипт контентавот так:

browser.tabs.query({currentWindow: true, active: true}).then(res => {
    browser.tabs.executeScript(res.id, {code: "foo()"})
})

В консоли моей вкладки я вижу

VM181:1 Uncaught ReferenceError: foo is not defined
at <anonymous>:1:1

Оба сценария содержимого должны находиться в одной среде выполнения, поэтому я должен иметь возможность совместно использовать функции и переменные воба сценария.

Я недавно добавил Webpack для создания своего расширения Chrome, и я использую Webextension-Polyfill , чтобы обещать API chrome.* как browser.

В старой версии моего кода это работало нормально, но теперь это не работает.У меня такое чувство, что это из-за Webextension-Polyfill, но я, честно говоря, не могу этого понять.

EDIT :

Код executeScript запускается ввкладка.Я могу console.log, и это появляется в консоли.Однако он не имеет доступа к пространству имен моего существующего скрипта контента.

РЕДАКТИРОВАТЬ 2 :

Я добавил другой скрипт контента с помощью

function foo() {
    console.log("foo")
}

И это доступно из введенного скрипта.Так что я думаю, это как-то связано с Webpack.

Это как-то связано с областью видимости в пакетах Webpack?

...