【问题标题】:Pass Variable to Badge Text in Chrome Extension将变量传递给 Chrome 扩展中的徽章文本
【发布时间】:2026-01-08 21:25:01
【问题描述】:

我已经构建了一个扩展程序,它从页面上的 div 中获取一些信息并将其存储在一个名为“div”的变量中。我现在需要将该值传递到我的 background.js 文件中,以便我可以更新徽章以反映该变量中的文本。

我已经阅读了 sendMessage 信息,但每次我将代码行添加到我的页面时,它似乎都会破坏扩展名,所以我肯定做错了什么。

这是其中没有 setBadgeText 信息的代码(当前正在运行)。

getQueue.js

var myVar = null;
setFunction();

function setFunction() {
    myVar = setInterval(function () {myTimer();}, 10000);
}

function myTimer() {
var THRESHOLD = 0;
var div = document.getElementById("sessions_queued_now_row-000");
var num = parseInt(div.innerText);

// Here is where I want to pass div to background.js to update the badge text

if (num >= THRESHOLD) {
    // I do a bunch of stuff here       
}


}

我的 background.js 文件现在没有做太多事情,只是在新标签页中打开了一个 URL。

我正在寻找需要添加到 getQueue.js 文件和 background.js 文件的内容。

谢谢

【问题讨论】:

    标签: javascript jquery google-chrome google-chrome-extension


    【解决方案1】:

    你需要Messaging

    关于这个主题的文档很好;然而,一个简短的概述:

    1. 扩展页面1可以为chrome.runtime.onMessage事件注册一个监听器。

    2. 内容脚本调用 chrome.runtime.sendMessage 向其父扩展中的所有扩展页面广播 JSON-serializable 消息。

    1请参阅此architecture overview 以更好地定义“扩展页面”

    我明确强调“JSON-serializable”,因为HTMLElement不可可序列化的。您需要在发送前提取所需的属性(如innerText)。

    // Background script
    
    chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
      // It is recommended to add a message type so your code
      //   can be ready for more types of messages in the future
      switch(message.type) {
        case "updateBadge":
          // Do stuff with message.data
          break;
        default:
          console.warn("Unrecognized message type: " + message.type);
          break;
      }
    });
    
    // Content script
    
    var div = document.getElementById("sessions_queued_now_row-000");
    var data = { text : div.innerText /*, something else?*/ };
    chrome.runtime.sendMessage({ type: "updateBadge", data: data });
    

    【讨论】:

      最近更新 更多