Chrome扩展程序-从ContentScript向弹出窗口发送消息

时间:2018-07-16 14:53:06

标签: javascript google-chrome-extension messaging

我们正在编写一个带有内容脚本的chrome扩展程序(内部工具)。内容脚本创建一个iframe,并将源设置为popup.html。然后,内容脚本从文档中获取数据并发送如下消息:

chrome.runtime.sendMessage({ messageObjectHere });

popup.js的监听方式如下:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
            // Process message here    
});

一切正常,直到我们打开第二个选项卡或第三个选项卡等为止,因为内容脚本具有setTimeout,该setTimeout一直在监视页面中的更改并将更新发送到popup.js。

非常快速地查看console.logs,消息的数量增加了,我相信popup.js正在处理所有打开的选项卡中的所有消息。

有没有一种方法可以确保内容脚本仅将消息发送到它创建的popup.js,并在每个页面保留一个实例。我是否缺少contentScript.js和popup.js的体系结构和实例中的基本知识?

当我们从popup.js调用sendMessage时,用户:

chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
               chrome.tabs.sendMessage(tabs[0].id, { messageObjectHere });
});

但这似乎不是contentScript.js的选项。在我走下一条非常黑暗的道路之前,即跟踪原始消息和目标消息的唯一ID,并确保只处理右侧选项卡的消息,还有更好的方法吗?

0 个答案:

没有答案