将变量传递给Chrome扩展程序中的徽章文本

时间:2015-02-17 00:51:22

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

我已经构建了一个扩展程序,它从页面上的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文件现在没有做太多事情,但在新标签中打开了一个网址。

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

由于

1 个答案:

答案 0 :(得分:0)

您需要Messaging

该主题的文档很好;但是,简短概述:

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

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

  3. 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 });