Сценарий содержимого не прослушивает событие сообщения - PullRequest
0 голосов
/ 26 февраля 2019

Я разрабатываю свое первое расширение для браузера для моего сайта.

В основном это расширение должно иметь действие браузера, которое открывает всплывающее окно, в котором можно редактировать определенные значения файлов cookie для текущей страницы.

Однако файл cookie A может существовать наpage /, в то время как cookie B может существовать на странице /checkout.Поэтому я не хочу перечислять каждый файл cookie во всплывающем окне, только тот, который активен на текущей странице.

Итак, я искал документацию и обнаружил, что для связи между веб-страницей иНадстройка, вы должны использовать систему сообщений, как описано здесь

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Communicating_with_the_web_page

Для этого на моем сайте есть файл JavaScript, который загружается на каждую страницу.В этом JavaScript я выполняю следующий код

window.postMessage({type: 'FROM_PAGE', data: visibleCookies}, '*');

Этот фрагмент кода определенно выполняется, потому что я поставил console.log до или после этого оператора, я вижу, чтоэто регистрируется.

Теперь в моем скрипте контента я хочу послушать это, выполнив следующий код

// experimentManager.js
console.log('testd');
window.addEventListener('message', (event) => {
    console.log(event);
    if (event.source !== window) {
        return;
    }
});

Однако console.log(event); никогда не выполняется.Слушатель никогда не активируется.Когда я нажимаю на действие браузера, чтобы открыть всплывающее окно, testd регистрируется в консоли, но, тем не менее, слушатель не получает никаких событий.Это просто не выполняется.

Я не знаю, какие файлы имеют отношение, но это мой manifest.json

// manifest.json
{
  "manifest_version": 2,
  "name": "My first addon",
  "version": "1.0",

  "description": "My first addon description",

  "icons": {
    "48": "icons/icon.png"
  },
  "browser_action": {
    "default_icon": "icons/icon.png",
    "default_title": "My first addon",
    "default_popup": "popup/manage_experiment.html",
    "browser_style": true
  },
  "permissions": [
    "tabs",
    "cookies",
    "<all_urls>"
  ],
  "content_scripts": [
    {
      "matches": ["*://*.mydomain/*"],
      "js": ["experimentManager.js"]
    }
  ]
}

И внутри скрипта всплывающего окна я выполняю этокод между прочим

browser.tabs.executeScript({file: "/content_scripts/experimentManager.js"})
    .then(manageExperiments)
    .catch(handleError);

, который, вероятно, является причиной того, что console.log('testd') выполняется, но ничего больше?

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...