微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果runtime.sendMessage没有收到响应,则捕获

如何解决如果runtime.sendMessage没有收到响应,则捕获

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

在某些情况下,我想向弹出窗口发送消息。首先,我需要确定是否完全打开了弹出窗口(可以使用 chrome.extension.getViews({type:“ popup”}))。其次,我想向该弹出窗口发送消息。问题是我只想在某些异步任务之后将 runtime.onMessage 侦听器放置在弹出窗口中,因此,我们将得到的是,如果打开了弹出窗口,我们将尝试发送消息在那里,它将产生一个错误,因为 runtime.sendMessage 方法将尝试向未设置的( runtime.onMessage )侦听器发送消息。

由于chrome API处理该错误的方式,我找不到捕捉该错误方法。基本上,如果我要向未设置的 runtime.onMessage 侦听器发送消息,我想要的是能够捕获错误

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。