如果运行时.sendMessage 未收到响应,则捕获



假设我们有一个与浏览器操作弹出窗口通信的后台脚本。

在某些情况下,我想发送一条弹出消息。首先,我需要了解是否打开了弹出窗口(其中可以使用chrome.extension.getViews({type:"popup"}((。其次,我想向弹出窗口发送一条消息。问题是,我只想在某些异步任务之后将运行时.onMessage侦听器放在弹出窗口中,因此我们会得到的是,如果弹出窗口被打开,并且我们将尝试在那里发送消息,那么它将在运行时之后产生错误。sendMessage方法将尝试向未设置(尚未设置(的runtime.onMessage侦听器发送消息。

我找不到一种方法来捕捉这个错误,因为它在chrome API中的处理方式。基本上,如果我试图向unset运行时发送消息,我想要的是能够捕获错误。onMessage监听器。

应该可以通过检查sendMessage回调中的chrome.runtime.lastError来捕获错误:

chrome.runtime.sendMessage('foo', data => {
if (chrome.runtime.lastError) {
console.log('Yay');
} else {
// use data
}
});

第页。S.在后台脚本和弹出脚本等两个扩展页面之间进行通信时,您可能不需要使用扩展消息,因为它很慢(它在内部序列化为JSON(。您可以使用弹出脚本中的chrome.runtime.getBackgroundPage或chrome.extension.getBackbackgroundPage直接访问后台脚本的window对象及其全局变量。您还可以使用BroadcastChannel API,它使用快速结构化克隆算法,该算法能够传输比基于JSON的扩展消息传递更多的对象类型。

相关内容

最新更新