ПРИМЕЧАНИЕ. ЭТО МОЕ ПЕРВОЕ ХРОМНОЕ РАСШИРЕНИЕ, И ЭТО УПРАЖНЕНИЕ, ЧТОБЫ ПОЛУЧИТЬ ЗНАКОМСТВО С РАЗРАБОТЧИВАЮЩИМИСЯ РАСШИРЕНИЯМИ.
Я делаю расширение Chrome, которое анализирует страницу. Когда пользователь нажимает кнопку расширения, payload.js выполняет синтаксический анализ страницы, и во всплывающем окне они могут выбрать параметр, который будет определять, как будет выводиться проанализированная информация.
Я хочу, чтобы после выбора параметра функция внутри payload.js выполняла и оценивала параметр и соответствующим образом форматировала проанализированную информацию. Наконец, он отправляет сообщение обратно в popup.js, содержащее отформатированную проанализированную информацию, и popup.js отображает его в текстовом поле внутри всплывающего окна.
Я могу нормально общаться с payload.js и popup.js, но, похоже, не могу сделать обратное.
Вот мой код и то, что я пробовал
popup.js
// Inject the payload.js script into the current tab after the popout has loaded
window.addEventListener('load', function (evt) {
chrome.extension.getBackgroundPage().chrome.tabs.executeScript(null, {
file: 'payload.js'
});;
});
// Listen to messages from the payload.js script and write to popout.html
chrome.runtime.onMessage.addListener(function (message) {
document.getElementById('output').textContent = message;
});
document.addEventListener('DOMContentLoaded', function() {
var opt = document.getElementById('generate_type');
opt.addEventListener('click', function() {
chrome.runtime.sendMessage(opt.value); //contains value of selection
});
});
payload.js
console.info("executed");
var parsed_info = [];
parse_info();
function parse_info()
{
//CODE that parses page
}
function generate_html()
{
//CODE that generates html output in var html
chrome.runtime.sendMessage(html);
}
function generate_reddit()
{
//CODE that generates MARKUP for reddit in var reddit
chrome.runtime.sendMessage(reddit);
}
function eval_opt(opt)
{
//evaluate if we should call generate_reddit or generate_html based on opt
}
chrome.runtime.onMessage.addListener(function (message) {
alert(message);
eval_opt(opt);
});
manifest.json
{
"manifest_version": 2,
"name": "Hello World",
"description": "A simple page-scraping extension for Chrome",
"version": "1.0",
"author": "@Gabriel",
"background": {
"scripts": ["popup.js"],
"persistent": true
},
"permissions": [
"tabs",
"http://*/",
"https://*/"
],
"browser_action": {
"default_icon": "logo.png",
"default_popup": "popup.html"
}
}
... и укажите идентификатор вкладки в качестве первого параметра ^



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем
popup.jsиспользуйтеchrome.tabs.sendMessageвместоchrome.runtime.sendMessageи попробуйте еще раз.