📜  从(非内容脚本)扩展组件向内容脚本发送数据(传递消息) - Javascript (1)

📅  最后修改于: 2023-12-03 15:21:54.609000             🧑  作者: Mango

从非内容脚本扩展组件向内容脚本发送数据

在使用浏览器扩展时,有时需要从扩展中的非内容脚本向内容脚本发送数据(传递消息)。这可以通过使用chrome.runtime.sendMessage()函数来实现。下面是详细介绍:

  1. 首先,在扩展的非内容脚本中使用chrome.runtime.sendMessage()函数发送消息。该函数接受三个参数:第一个参数是要发送的消息对象,第二个参数是可选的回调函数,用于在接收到响应后执行。第三个参数也是可选的,用于指定发送消息的目标(可以是具有特定扩展ID的其他扩展,或者是当前扩展中的其他脚本)。这里只需要关注前两个参数,因此可以简单地将第三个参数设置为null。
chrome.runtime.sendMessage({message: "hello"}, function(response) {
  console.log(response);
});

这将向扩展中所有内容脚本发送一个包含"message"属性的消息对象,并指定一个回调函数来在接收到响应后执行。

  1. 在接收消息的内容脚本中,需要使用chrome.runtime.onMessage.addListener()函数监听消息。该函数接受两个参数:第一个参数是回调函数,用于处理接收到的消息。该函数的第一个参数是包含接收到的消息数据的对象。回调函数可以返回一个包含响应数据的对象。第二个参数是可选的,可以在监听消息时过滤接收的消息类型。如果不需要过滤,则可以将其设置为null。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  console.log(request.message);
  sendResponse({response: "world"});
});

这将向内容脚本注册一个监听器,用于在接收到消息时将"message"属性打印到控制台,并返回一个包含"response"属性的响应对象。

需要注意的是,chrome.runtime.sendMessage()和chrome.runtime.onMessage.addListener()之间的通信是异步的。因此,在使用sendMessage()发送消息之后,必须使用回调函数来处理响应消息。

此外,如果发送消息前,需要检查扩展是否安装,可以在非内容脚本中使用chrome.runtime.onInstalled.addListener()函数来监听扩展是否安装。

以上就是从非内容脚本扩展组件向内容脚本发送数据的介绍。