tabs.executeScript встречает ReferenceError при доступе к функции, определенной в скрипте содержимого
Обновление: Кажется, проблема в том, что 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 для обещания chrome.*
API как browser
,
В старой версии моего кода это работало нормально, но теперь это не работает. У меня есть чувство, что это из-за Webextension-Polyfill, но я честен, "не могу понять это.
РЕДАКТИРОВАТЬ:
executeScript
код запускается во вкладке. Я могу console.log
и это появляется в консоли. Тем не менее, он не имеет доступа к пространству имен моего существующего скрипта контента.
РЕДАКТИРОВАТЬ 2:
Я добавил еще один контент-скрипт с
function foo() {
console.log("foo")
}
И это доступно из введенного скрипта. Так что я думаю, это как-то связано с Webpack.
Это как-то связано с областью видимости в комплектах Webpack?