Отправьте переменную из popup.js в background.js в расширении Chrome - PullRequest
0 голосов
/ 01 июля 2019

Прежде чем начать - да, я знаю, что есть несколько ответов на подобные вопросы, но ни один из них не является полным. То есть Вы не можете использовать информацию в ответах без документов, которые не были включены в вопрос.

Поэтому я пытаюсь настроить скаффолд для использования в расширениях Chrome, где я могу напечатать что-то в поле во всплывающем окне, и оно сохраняется в фоновом режиме. Я, вероятно, затем буду использовать эту переменную для вызова API на месте (например, почтовый индекс для приложения погоды).

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

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

manifest.json (здесь нет ничего сумасшедшего):

{
  "name": "Popup to Background Communication",
  "description": "Chrome Extension Scaffolding for Communication between
    the popup and the background script.",
  "manifest_version": 2,
  "version": "1.0",
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "browser_action": {
    "default_popup": "popup.html"
  },
  "permissions": [
    "storage",
    "activeTab"
  ]
}

popup.html (показывает поле с кнопкой sumbit)

<!doctype html>
<html>

  <div class="field_entry">
    <p>Enter Message to be Sent:</p>
    <form id = "messageForm">
      <input type="text" id="messageToSend" />
      <input type="submit"/>
    </form>
  </div>

</html>

popup.js (прослушивает отправку и вызывает функцию из фона):

function sendToBackground() {
  var messageFromForm = document.getElementById("messageToSend");
  var background = chrome.extension.getBackgroundPage();
  background.setBadgeToMessage(messageFromForm);
}

document.getElementById('messageForm')
            .addEventListener('submit', sendToBackground);

background.js (содержит переменную для изменения сообщения из всплывающего окна)

var badge = "0";

function setBadgeToMessage(msg){
  badge = msg;
  chrome.browserAction.setBadgeText(badge + "");
};

Ничего не происходит, когда я отправляю. Я думаю, что неправильно то, что я обращаюсь к переменной из popup.js, которая является локальной для background.js, но кажется, что она должна как минимум изменить версию, скопированную в popup.js, и изменить значок.

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

1 Ответ

2 голосов
/ 01 июля 2019

Ты почти у цели. Однако вы не можете передать элемент как сообщение в Chrome API. Документы для browserAction.setBadgeText указывают объект. Сделай это так:

function sendToBackground() {
  var messageFromForm = document.getElementById("messageToSend").value;
 chrome.runtime.getBackgroundPage((background) => background.setBadgeToMessage(messageFromForm));

  ...
}

...

function setBadgeToMessage(msg){
  badge = msg;
  chrome.browserAction.setBadgeText({ text : badge });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...