Javascript 如何检查a";同步“;异步函数中的值?
我尝试对Chrome扩展进行一些更改。我需要扩展检查该值,如果为真,则执行脚本。如果为假,则什么也不做。我写了这样的东西:Javascript 如何检查a";同步“;异步函数中的值?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我尝试对Chrome扩展进行一些更改。我需要扩展检查该值,如果为真,则执行脚本。如果为假,则什么也不做。我写了这样的东西: chrome.tabs.onUpdate.addListener(函数(tabId、changeInfo、tab){ if(localStorage[“statusOfSomething”]){ executeScript(tabId,{file:“file.js”,runAt:'document_end'}); } }); 但这始终采用localStorage[“sta
chrome.tabs.onUpdate.addListener(函数(tabId、changeInfo、tab){
if(localStorage[“statusOfSomething”]){
executeScript(tabId,{file:“file.js”,runAt:'document_end'});
}
});
但这始终采用localStorage[“statusOfSomething”]
的初始值。因此,有一个异步函数为“onUpdate”注册侦听器。但是我需要检查“now”的localStorage[“statusOfSomething”]
值,而不是通过注册侦听器来检查时间值
我该怎么做
编辑:
实际上,我想检查两件事:
background.js
文件中定义的。比方说;
a、 com,b.com。。。等等
var sites = [{
name : "a",
wildcard : ["*://a.com/*"],
js : "a.js"
},{
name : "b",
wildcard : ["*://b.com/*"],
js : "b.js"
}]
还有站点的状态(启用/禁用;真/假)
我认为通过localStorage存储状态是很好的,所以我将其写为初始值true
:
for(var i = 0; i<sites.length; i++){
localStorage[sites[i].name] =true;
}
如果用户选中网站状态选项复选框,则options.js
发送消息:
$('#' + name).change(function(){
var status = $(this).is(':checked');
chrome.extension.sendMessage({method: "setSite", site: this.id, active: status}, function(response) {
console.log(response.data);
});
});
现在,回到background.js
,对于选项卡的每次更新,我都需要同时检查这两件事:
1.我对这个网站感兴趣吗?
2.我现在可以吗
于是我写道:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete') {
var url = tab.url;
for(var i = 0; i<sites.length; i++){
var site = sites[i];
var name = site.name;
var wildcard = site.wildcard;
if(localStorage[name] && testUrl(url,wildcard)){
chrome.tabs.executeScript(tabId, {file: site['js'] ,runAt:'document_end'});
break;
}
}
}
});
chrome.tabs.onUpdate.addListener(函数(tabId、changeInfo、tab){
如果(changeInfo.status==‘完成’){
var url=tab.url;
对于(VaR i=0;II是混淆的。在更新标签时,您已经检查了<代码>的状态值<代码>,而不是当它被注册时。好吧,你确定吗?我想这是问题,但是你的评论让我感到困惑。我可能错过了其他东西。我会检查另一个PAR。如果
有效,则t将在此之前更改状态。我确定。在触发事件之前,处理程序中的任何内容都不会被触动。也许如果您发布更多代码,我们可以帮助您找到问题。谢谢,我添加了详细信息和完整的代码存储库链接。
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete') {
var url = tab.url;
for(var i = 0; i<sites.length; i++){
var site = sites[i];
var name = site.name;
var wildcard = site.wildcard;
if(localStorage[name] && testUrl(url,wildcard)){
chrome.tabs.executeScript(tabId, {file: site['js'] ,runAt:'document_end'});
break;
}
}
}
});