我有一个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,但也没有返回。