0

I try to make some changes on a Chrome extension. I need the extension checks the value and if it is true, then execute a script. If false, then do nothing. I wrote something like this:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(localStorage["statusOfSomething"]){
        chrome.tabs.executeScript(tabId, {file: "file.js" ,runAt:'document_end'});
    }
});

But this takes the initial value of localStorage["statusOfSomething"] always. So there is an async function to register a listener for "onUpdated". But I need to check the localStorage["statusOfSomething"] value of "now", not the value of the time by registering the listener.

How can I do this?

Edit: Actually I was trying to check two things:

  1. if the website is in the site list of extension
  2. if this website is enabled for the extension

Now here the full story;

There are some websites, I defined them on background.js file. Let's say; a.com, b.com ... etc.

var sites = [{
    name     : "a",
    wildcard : ["*://a.com/*"],
    js       : "a.js"
},{
    name     : "b",
    wildcard : ["*://b.com/*"],
    js       : "b.js"
}]

and there are statuses of the sites (enable/ disable; true/false) I think it was good to store statuses by localStorage, so I write as initial value true:

for(var i = 0; i<sites.length; i++){
    localStorage[sites[i].name] =true;
}

As option; it was needed to addListener for changes:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    if(request.method == "setSite"){
        var name = request.site;
        var status = request.active;

        localStorage[name] = status;
    }
    return true;
});

If user checks the checkbox for status option of the website, then options.js sends message:

$('#' + name).change(function(){
    var status = $(this).is(':checked');
    chrome.extension.sendMessage({method: "setSite", site: this.id, active: status}, function(response) {
        console.log(response.data);
    });
});

Now, back to background.js , for every update of the tab, I need to check these two things together: 1. am I interested in this website? 2. is it enable for me now?

So I wrote:

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

Here, I get the value of localStorage[sitename] true

If you are more interested, you can see the code on github (the version)

4

0 回答 0