Как я могу передать переменную из сценария содержимого в сценарий страницы в WebExtensions?

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

var myImage = browser.extension.getURL("myImage.jpg");

Затем я вставляю некоторый скрипт из скрипта контента на загруженную страницу как:

var s = document.createElement('script');
s.src = browser.extension.getURL("myscript.js");
document.body.appendChild(s);

Как я могу получить доступ к переменной «myImage» в сценарии «myscript.js»?


person Alexander Rysev    schedule 01.07.2019    source источник
comment
Вы можете использовать обмен сообщениями CustomEvent (пример).   -  person wOxxOm    schedule 01.07.2019


Ответы (1)


вы можете использовать либо CustomEvent, либо window.postMessage, а в myscript.js прослушать событие или сообщение.

Пример для window.postmessage

window.postMessage({type: 'image-var', params: myImage }, "*");

в myscript.js

 window.addEventListener('message', function (e) {
        if (e.data.type === 'image-var') {
            console.log(e.data.params);
        }
    });

Пример CustomEvent:

document.dispatchEvent(new CustomEvent('yourCustomEvent', { detail: data }));

в myscript.js

document.addEventListener('yourCustomEvent', function (e) {
  var data = e.detail;
  console.log('received', data);
});
person Hemant    schedule 03.07.2019