Chrome Расширения Сообщения Передача данных из всплывающего окна. js в скрипты содержимого - PullRequest
0 голосов
/ 22 января 2020

Я разработал расширение chrome, которое во всплывающем окне имеет зависимый выпадающий список. Исходя из выбора пользователей в этом раскрывающемся списке, делается вызов ajax, чтобы получить некоторые данные, основываясь на выбранной опции if. Для этого я написал это jquery, которое работает правильно и возвращает идентификатор выбранных опций.

$('#scenarioDropdownList').change(function () {
    scenarioId = $('#scenarioDropdownList option:selected').prop('id');
    });

Вызов ajax принимает в качестве параметра attribute_d и возвращает данные с совпадающим ИД сценария. Затем я использую эти данные для управления полями в DOM. Из-за этого мой контент-скрипт выглядит следующим образом, который включает в себя вызов ajax для получения данных, а затем некоторую логику c, которая подает в суд на данные.

По мере разработки расширения chrome падение Во всплывающем окне отображается down. html, поэтому jquery для получения идентификатора (см. первую часть кода) находится во всплывающем окне. js. Мне нужно иметь возможность передать аргумент sceneId из всплывающего окна. js в скрипт содержимого, чтобы его можно было использовать в вызове ajax.

Я прочитал о передаче сообщений и предложил следующее:

popup. js

$('#scenarioDropdownList').change(function () {
            scenarioId = $('#scenarioDropdownList option:selected').prop('id');
            chrome.runtime.sendMessage(scenarioId);
            });

content script ( content. js)

chrome.runtime.onMessage.addListener(function(response, sender, sednResponse) {
    var getScenarioId = response;
})

К сожалению, пока это не работает, так как я изо всех сил пытаюсь найти решение, которое будет работать, и затем передать ScriptId из всплывающего окна. js в контентный скрипт, чтобы его можно было использовать.

К вашему сведению, я не получаю ошибку с кодом, который я создал для передачи сообщений.

1 Ответ

0 голосов
/ 22 января 2020

После нескольких попыток решить мою проблему, я пришел к следующему, который работает. В настоящее время это довольно просто. Я могу улучшить это, добавив в ответном сообщении et c .. но для того, что я желаю, эта функциональность подходит.

Всплывающее окно. js

 $('#scenarioDropdownList').change(function () {
            scenarioId = $('#scenarioDropdownList option:selected').prop('id');


            // Here I pass the message to the content script with the actual content being the result of the variable scenrioId.
            chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
                chrome.tabs.sendMessage(tabs[0].id, scenarioId)
              });
        })

Content Script (content. js)

chrome.runtime.onMessage.addListener(function(request) {
    console.log(request.scenarioId);  
      return true; // Ensures it is async

В настоящее время я просто записываю результат в консоль, но собираюсь реализовать его, чтобы я мог его использовать в другом месте.

...