将消息从后台脚本发送到内容脚本

时间:2018-09-16 15:52:10

标签: javascript jquery google-chrome-extension sendmessage content-script

我当前正在运行chrome扩展程序background.js脚本,该脚本内部是一个异步函数,该函数在for循环中运行,在该函数的中间,它转到一个URL,然后该URL运行一个内容脚本

这是for循环的样子:

var atc_count = 1;
for (i = 0; i < data.count; i++) {
    console.log("waiting for getItem");
    await getItem(atc_count);
    atc_count++;
}

我当前正在运行chrome扩展程序background.js脚本,该脚本内部是一个异步函数,该函数在for循环中运行,在该函数的中间,它转到一个URL,然后该URL运行一个内容脚本

在函数中间,我想向atc_count的内容脚本发送一条消息,该内容脚本将使用atc_count并对其执行某些操作

这是我在后台脚本中尝试过的将atc_count发送到内容脚本的方法:

chrome.tabs.query({ currentWindow: true, active: true }, function(tab) {
  chrome.tabs.update(tab[0].id, { url: color_url }, () => { // tab.id
    chrome.tabs.sendMessage(tabs[0].id, {atc_count: atc_count}, function(response) {
      console.log(response.go);
      resolve("Updated the tab");
    });
  });
});

然后尝试使用以下内容在内容脚本中接收消息:

chrome.runtime.onMessage.addListener(
  function(message, sender, sendResponse) {
    console.log(message.atc_count);
    sendResponse({go: "atc done!"});
});

这不起作用。

我想将atc_count从后台脚本发送到内容脚本,当该内容脚本收到此消息时,它应该使用atc_count做某事,然后在完成后将其发送回sendResponse以及后台脚本接收到此消息(sendResponse ),它知道内容脚本已完成并继续其循环。

所以我希望它在每个循环中只使用一次内容脚本,而每个循环中仅更改atc_count。

如果您需要更好地澄清我的问题,请lmk。

感谢您抽出宝贵的时间阅读本文,希望您能对我有所帮助。谢谢<3!

0 个答案:

没有答案