У меня есть расширение 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, и это тоже не возвращает.