【chrome扩展开发】消息通讯之onMessage消息监听

前言

chrome.runtime.onMessage.addListener 是 Chrome 扩展程序中用于监听其他模块发送的消息并做出响应的 API
当从扩展进程 (by runtime.sendMessage) 或内容脚本 (by tabs.sendMessage)发送消息时触发

语法

chrome.runtime.onMessage.addListener(
  callback: function,
)

callback参数如下:

(message: any, sender: MessageSender, sendResponse: function) => boolean | undefined

参数类型说明
requestAny包含发送者的信息和请求的内容
senderMessageSender包含发送者的详细信息
sendResponseFunction是一个可以用来向发送者发送响应的函数

基本示例

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.id + " 发送了请求:" + request.data);
    // 你可以在这里处理接收到的消息
    // 如果需要,你可以通过 sendResponse 函数发送响应给发送者
    // sendResponse({data: "回复消息"});
  }
);

在这个例子中,我们监听来自任何发送者的消息;
每当有消息发送时,监听函数(callback)就会被调用;

注意

出于安全考虑,发送的消息和响应必须在相同的扩展程序内传递不能跨越扩展程序
onMessage方法需要在background脚本中注册

封装

示例

const listenerList = {
	token: function({ request, response }){
		// code...
	},
	/**
	 * 创建与项目的共享变量数据
	 */
	createPluginVariable: function({ request, response }){
		let name = SystemEnum.APP_PLUGIN_KEY;
	    let value = '1';
	    let _cf = {url: SysConfig.APP_URL, name}
	    chrome.cookies.remove(_cf,function (res) {
	      _cf.domain = SysConfig.APP_DOMAIN;
	      _cf.value = value;
	      _cf.expirationDate = new Date().setDate(new Date().getDate() + 7);
	      chrome.cookies.set(_cf, function (res) {
	        response({name, value, config: request, res})
	      });
	    });
	}
};

const message = new MessageListener();
for (let messageKey in listenerList){
  message.addListener(messageKey, listenerList[messageKey]);
}
message.start();

// content script脚本中发送消息
// chrome.runtime.sendMessage({contentRequest:'createPluginVariable'}, ()=>{})

实现

class MessageListener {
  /**
   * @var chrome.runtime.onMessage|null
   */
  _message
  /**
   * @var Object
   */
  _listener

  constructor() {
    this._listener = {}
    this._message = chrome.runtime.onMessage || null
    return {
      addListener: (messageKey, request) => this.addListener(messageKey, request),
      start: () => this.start(),
    }
  }

  addListener(messageKey, request) {
    this._listener[messageKey] = request
  }

  start() {
    if (!this._message) return
    let that = this
    that._message.addListener(function (request, sender, response) {
      return (
        chrome.tabs.query({ currentWindow: !0, active: !0 }, function () {
          if (!!that._listener[request.contentRequest]) {
            that._listener[request.contentRequest]({
              request,
              response,
            })
          }
        }),
        !0
      )
    })
  }
}

Chrome Developers官方接口文档:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您想了解如何使用Java的onMessage监听IBM MQ消息队列,是吗? 首先,您需要确保您已经安装了IBM MQ客户端,并且您已经设置了必要的连接参数和队列管理器名称。 接下来,您可以使用Java的JMS(Java Message Service)API来编写消息监听器。以下是一个简单的示例代码: ```java import javax.jms.*; import com.ibm.mq.jms.MQConnectionFactory; import com.ibm.mq.jms.MQQueueConnectionFactory; public class MQListener implements MessageListener { public static void main(String[] args) throws Exception { MQConnectionFactory factory = new MQQueueConnectionFactory(); factory.setHostName("localhost"); factory.setPort(1414); factory.setChannel("myChannel"); factory.setQueueManager("myQueueManager"); Connection connection = factory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = session.createQueue("myQueue"); MessageConsumer consumer = session.createConsumer(queue); consumer.setMessageListener(new MQListener()); connection.start(); System.out.println("Listening for messages..."); } public void onMessage(Message message) { try { System.out.println("Received message: " + message.getBody(String.class)); } catch (JMSException e) { e.printStackTrace(); } } } ``` 在这个例子中,我们创建了一个MQListener类,实现了MessageListener接口。我们使用MQConnectionFactory创建了一个连接,并指定了连接参数。然后,我们创建了一个会话、一个队列和一个消息消费者。最后,我们将MessageListener添加到消息消费者中,并启动连接。 当有新的消息到达队列时,onMessage方法会被调用,并且我们可以在方法中处理该消息。 请注意,上述示例仅适用于IBM MQ。如果您要使用其他消息队列,您需要使用相应的JMS API和连接工厂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陀螺蚁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值