Meneruskan Variabel ke Teks Lencana di Ekstensi Chrome

Saya telah membuat ekstensi yang mengambil beberapa info dari div pada halaman dan menyimpannya dalam variabel bernama 'div'. Saya sekarang harus meneruskan nilai itu ke file background.js saya sehingga saya dapat memperbarui lencana untuk mencerminkan teks dalam variabel itu.

Saya telah membaca info sendMessage tetapi setiap kali saya menambahkan baris kode ke halaman saya sepertinya ekstensinya rusak jadi saya pasti melakukan sesuatu yang salah.

Berikut adalah kode tanpa info setBadgeText di dalamnya (saat ini berfungsi).

dapatkanQueue.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       
}


}

File background.js saya tidak berfungsi banyak saat ini tetapi membuka URL di tab baru.

Saya mencari apa yang perlu saya tambahkan ke file getQueue.js dan juga file background.js.

Terima kasih


person Brandon Wind    schedule 17.02.2015    source sumber


Jawaban (1)


Anda memerlukan Pesan.

Dokumentasinya bagus mengenai topik ini; namun, gambaran singkatnya:

  1. Laman ekstensi1 dapat mendaftarkan pendengar untuk peristiwa chrome.runtime.onMessage.

  2. Skrip konten memanggil chrome.runtime.sendMessage untuk menyiarkan pesan JSON-serializable ke semua laman ekstensi di ekstensi induknya.

1 Lihat ikhtisar arsitektur ini untuk definisi "ekstensi" yang lebih baik halaman"

Saya secara tegas menekankan "JSON-serializable", karena HTMLElement tidak dapat diserialkan. Anda perlu mengekstrak properti yang Anda perlukan (seperti innerText) sebelum mengirim.

// 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 });
person Xan    schedule 17.02.2015