Доступ к переменным в browser.runtime.getBackgroundPage()

В настоящее время я создаю расширение для браузера с create-react-app в качестве основы, пытаясь использовать getBackgroundPage() вместо API обмена сообщениями для связи между фоновыми сценариями (я определил 3) и новой вкладкой, но похоже на вызов browser.runtime.getBackgroundPage() на новой вкладке возвращает объект Window без каких-либо моих функций или переменных из фоновых скриптов, прикрепленных как свойства Window.

Ниже возвращается ошибка "переменная не определена", а "page.foo() не является функцией".

// background_3.js

var test = [];

// Some stuff so webpack doesn't get rid of the unused variable.
for (let i = 0; i < 10; ++i) {
    test.push(i);
}

function foo() {
    console.log("foo");
}
// New Tab React page
import browser from "webextension-polyfill";

browser.runtime.getBackgroundPage()
    .then(page => {
        console.log(page.test);
        page.foo();
    });

Я что-то не так делаю? Должен ли я просто использовать API сообщений вместо этого?

1 ответ

Решение

Оказывается, веб-пакет оборачивает мои фоновые скрипты в некоторые другие функции, которые разрушают вещи. Вы можете вручную прикрепить вещи к объекту окна в фоновом скрипте, просто выполнив window.foo = foo например, как предложил wOxxOm.