Search code examples
google-chrome-extensionbrowser-tab

Chrome extension problem getting tab url


I'm not good at JS and I'm having some -I hope- stupid problem I'm not seeing on my code... if you guys could help me out, I'd really appreciate it.

My extension does some stuff with the current tab's URL. It worked ok using the onUpdate event on my background page, setting the tab's URL on a variable and then I used it on a pop-up.

The thing is that if the user starts, selecting different tabs, without updating the URLs my event won't be triggered again... so I'm now also listening to the onSelectionChanged event.

The thing is that there's no "tab" object within the onSelectionChanged event's parameters, so I cannot ask for the tab.url property.

I tried to use the chrome.tabs.getCurrent() method, but obviously I'm doing something wrong... and I reached the limit of my -very little- knowledge.

Here's the code, if you guys could take a look and point me in the right direction, I'll really appreciate it.

<script>
var tabURL = '';

var defaultURLRecognition = [ "test" ];

  // Called when the url of a tab changes.
  function checkForValidUrl(tabId, changeInfo, tab) {

            //THIS IS WHAT'S NOT WORKING, I SUPPOSE
    if (tab==undefined) {
        chrome.tabs.getCurrent(function(tabAux) {
            test = tabAux;
        });
    }
            //

    // If there's no URLRecognition value, I set the default one
    if (localStorage["URLRecognition"]==undefined) {
            localStorage["URLRecognition"] = defaultURLRecognition;
        };
    // Look for URLRecognition value within the tab's URL
    if (tab.url.indexOf(localStorage["URLRecognition"]) > -1) {

    // ... show the page action.
      chrome.pageAction.show(tabId);
      tabURL = tab.url;

    }
  };

  // Listen for any changes to the URL of any tab.
  chrome.tabs.onUpdated.addListener(checkForValidUrl);
  // Listen for tab selection changes
  chrome.tabs.onSelectionChanged.addListener(checkForValidUrl);

</script>

Solution

  • I would do something like this:

    function checkForValidUrl(tab) {
        //...
    }
    
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
        if(changeInfo.status == "loading") {
            checkForValidUrl(tab);
        }
    });
    
    chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo){
        chrome.tabs.getSelected(null, function(tab){
            checkForValidUrl(tab);
        });
    });