Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查a";同步“;异步函数中的值?_Javascript_Google Chrome Extension - Fatal编程技术网

Javascript 如何检查a";同步“;异步函数中的值?

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扩展进行一些更改。我需要扩展检查该值,如果为真,则执行脚本。如果为假,则什么也不做。我写了这样的东西:

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