Я разрабатываю свое первое расширение для браузера для моего сайта.
В основном это расширение должно иметь действие браузера, которое открывает всплывающее окно, в котором можно редактировать определенные значения файлов 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')
выполняется, но ничего больше?
Чего мне не хватает?