Цепочка двух вызовов XHR с использованием chrome.runtime.sendMessage - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть расширение Chrome, и я реорганизую свои вызовы XHR в фоновом скрипте, чтобы получить к ним доступ через обмен сообщениями в соответствии с новыми требованиями в Chrome 73 и выше для предоставления данных 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 у меня есть метод, который вызывает эти методы.В первом сообщении я присваиваю возвращенные данные значениям состояния.Это работает, как ожидалось.Тем не менее, второе сообщение не отправляется, и даже просто меняясь в операторе журнала, я не могу запустить его.

// 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
        }),
    );
}

Существуют ли какие-либо ограничения на отправку нескольких сообщений в слушатель в фоновом скрипте?Первый вызов XHR и msg возвращают данные, второй, кажется, не выполняется вообще (я заменил возвращаемое msg с помощью оператора console, и это тоже не возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...