chrome.tabs.sendMessage和chrome.runtime.sendMessage的用法及区别
在 Chrome 扩展开发中,chrome.tabs.sendMessage
和 chrome.runtime.sendMessage
是用于不同目的的消息发送 API,它们的主要区别在于消息的目标对象和发送范围:
-
chrome.tabs.sendMessage:
- 用于在扩展内的不同页面之间发送消息。
- 消息的目标对象是指定的标签页或标签页中的content script。
- 只能用于在扩展内的标签页之间进行通信,不能用于与扩展内的后台页面或其他扩展进行通信。
-
chrome.runtime.sendMessage:
- 用于在扩展内的不同组件之间发送消息,包括扩展内的所有页面和后台页面。
- 消息的目标对象是扩展内的所有组件,包括所有页面和后台页面。
- 不可以向标签页内的content script传递消息,此种情况应该用chrome.tabs.sendMessage
- 可以用于在扩展内的任何组件之间进行通信,包括标签页、后台页面和弹出页面之间的通信,还可以用于与其他扩展进行通信。
注意点:chrome.runtime.sendMessage的参数的回调函数与前置await必须二选一,不可同时设置,如果同时设置,await将会不起作用。另外,如果回调函数设置了return true,将不会广播给所有响应页面或组件,如果需要广播给所有页面和组件,不可以设置return true,或不设置回调函数