繁体   English   中英

在Chrome扩展程序中将变量从popup.js发送到background.js

[英]Send a variable from popup.js to background.js in Chrome Extension

在开始之前-是的,我知道对类似问题有一些答案,但没有一个是完整的。 也就是说,如果没有问题中未包含的文档,您将无法在答案中使用信息。

因此,我尝试设置一个可在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 (显示带有求和按钮的字段)

<!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的版本并更改徽章。

任何帮助将不胜感激。 我已经在这上面呆了两天了,这似乎是一个非常简单的问题。

你快到了。 但是,您不能将Element作为消息传递给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 });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM