使用chrome.runtime.sendMessage链接两个XHR调用

时间:2019-04-10 18:19:25

标签: javascript reactjs google-chrome-extension

我有一个Chrome扩展程序,并且正在将我的XHR调用重构为后台脚本,以便根据new requirements with Chrome 73并通过消息传递来访问,以便向内容脚本提供XHR数据。我有两个XHR调用-第一个XHR调用获取数据,第二个XHR调用使用从第一个返回的值作为查询的一部分。

// background.js
// First Call
chrome.runtime.onMessage.addListener(
  (request, sender, sendResponse) => {
    if (request.contentScriptQuery === 'getProductData') {
      let dataUrl = C.API(request.term);
      $.ajax({
        url: dataUrl,
        type: 'get',
        mode: 'no-cors',
        dataType: 'json',
      }).then(response => response)
        .then(text => sendResponse(text))
        .catch(err => console.log(err));
      return true;
    }
  });

// Second Call
chrome.runtime.onMessage.addListener(
  (request, sender, sendResponse) => {
    if (request.contentScriptQuery === 'getProductGroupData') {
      const dataUrl = C.PRODUCT_GROUPS_API(request.term);
      $.ajax({
        url: dataUrl,
        type: 'get',
        mode: 'no-cors',
        dataType: 'json',
      })
        .then(response => response)
        .then(text => sendResponse(text))
        .catch((err) => {
          console.log(err);
        });
      return true;
    }
  });

在我的React组件中,我有一个调用这些方法的方法。在第一个msg中,我将返回的数据分配给状态值。这正在按预期方式工作。但是,第二个msg没有发送,甚至只是交换了一条日志语句,我似乎也无法启动它。

// Content Script
// React component. fetchData() called from inside componentDidMount()
fetchData() {
    chrome.runtime.sendMessage(
      { contentScriptQuery: 'getProductData', type, term: searchTerm },
      text =>
        this.setState({
          // assign values from returned data
          superCategoryId: text.content[0].productGroupHierarchy.superCategoryId,          
        }),
    );
  
    chrome.runtime.sendMessage(
      { contentScriptQuery: 'getProductGroupData', term: this.state.superCategoryId },
      text =>
        this.setState({
            // assign values from returned data
        }),
    );
}

在后台脚本中将多个msg发送到侦听器是否有一些限制?第一个XHR调用和msg返回数据,第二个似乎根本不执行(我已经用控制台语句换出了return msg,但也没有返回。

0 个答案:

没有答案