Обновление : Кажется, проблема в том, что 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?