我正在开发一个chrome扩展程序,我对chrome.runtime.sendMessage
函数
以下是我的代码设置方式:
chrome.runtime.sendMessage( { method : "getLocalStorage", key: "email" }, function ( response ) {
console.log( "the response has been received" );
});
console.log( "I am here" );
$.ajax({});
打印出来:
I am here
the response has been received
所以我的问题是chrome.runtime.sendMessage与其余代码运行异步。所以我能做的就是把ajax放在sendMessage的响应函数中。唯一的问题是我有3个sendMessage事件在我执行ajax调用之前返回我需要的不同变量,所以遗憾的是这不是一个可行的选项。
在完成所有sendMessage调用之前,有没有办法暂停ajax调用?
答案 0 :(得分:1)
一种选择是使用Async.js。然后你可以做这样的事情:
async.parallel([
function(done) {
chrome.runtime.sendMessage( { your first message }, function ( response ) {
done();
});
},
function(done) {
chrome.runtime.sendMessage( { your second message }, function ( response ) {
done();
});
},
function(done) {
chrome.runtime.sendMessage( { your third message }, function ( response ) {
done();
});
}
], function() {
console.log( "I am here" );
$.ajax({});
})
答案 1 :(得分:1)
您应该考虑从旧的"存储localStorage
中的数据,使用sendMessage
" 范例查询背景到新的& #34;将数据存储在chrome.storage
中,随处访问" 范例; chrome.storage
API专门用于此目的。
缺点是所有访问变为异步。但至少你可以优化一下,例如你可以把你的电话粘在一起:
chrome.storage.local.get([key1, key2, key3], function(data) {
// Use data.key1, data.key2, etc.
$.ajax({});
});
如果还没有,您甚至可以提供默认值:
chrome.storage.local.get({key1: default1, key2: default2, key3: default3}, function(data) {
// Use data.key1, data.key2, etc.
$.ajax({});
});
最后但并非最不重要的是,您已chrome.storage.sync
会自动传播到其他已登录的个人资料。