在关闭Firefox侧栏时向内容脚本发送消息

时间:2019-04-29 07:40:00

标签: addeventlistener firefox-webextensions content-script firefox-sidebar

因为我们的侧边栏Web扩展程序修改了Web浏览器中显示的HTML内容,所以我们希望在关闭侧边栏后将页面清除。

因此,我尝试了这一点:

sidebar.js

(...)
class Sidebar extends React.Component {

  (...)
  componentDidMount() {
    (...)

    // on closing the sidebar
    window.addEventListener('pagehide', () => {
      console.log('Calling erase on tab', this.state.tabId);
      browser.tabs.sendMessage(this.state.tabId, {aim: 'erase'});
      console.log('AFTER');
    });

  }
  (...)
}

const panel = document.getElementById('panel');
ReactDOM.render(<Sidebar />, panel);

content.js

(...)
const messageHandler = async (message) => {
  console.log('CALL:', message);
  switch (message.aim) {
    case 'erase':
      erase();
      return true;
      (...)
    }
  }
};

browser.runtime.onMessage.addListener(messageHandler);

关闭侧栏时,在浏览器控制台中的结果为:

Calling erase on tab 1
AFTER

并且什么都不会显示在Web控制台中,尽管 other 消息在关闭前以CALL <message>格式显示。

我怀疑sidebar.js可能在将消息发送到content.js之前退出了。因此,我向事件监听器添加了awaitasync

    window.addEventListener('pagehide', async () => {
      console.log('Calling erase on tab', this.state.tabId);
      await browser.tabs.sendMessage(this.state.tabId, {aim: 'erase'});
      console.log('AFTER');
    });

然后在关闭侧栏时,浏览器控制台中的结果为(不包含AFTER):

Calling erase on tab 1

尽管在关闭前 other 消息以CALL <message>格式显示,但Web控制台中仍然没有显示什么

0 个答案:

没有答案