Search code examples
javascriptgoogle-chromegoogle-chrome-extension

refresh page until it changes chrome extension


i'm building extension for google chrome that refresh page until it changes its link. I tried this code but it didn't worked:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    
    

  if (/^https:\/\/meet.google.com\/lookup/.test(changeInfo.url)) {
    var intervalId = window.setInterval(function() {
        var code = 'window.location.reload(); ';
    chrome.tabs.executeScript(tab.id, {code: code});
      }, 30000);
    
    } 
    else {
      window.clearInterval(intervalId)
    }
      
});

i want to stop refresh when meet.google.com/lookup/ changes in another link, that could be also meet.google.com or meet.google.com/abcdef/. So it refresh the page, but when the link of google meet changes, it keeps to refresh page. How can i solve? Thanks everyone!

P.S: I added my answer on a comment for be more understandable


Solution

  • I am assuming your aim is to keep refreshing a tab unless its location is meet.google...(the regex you have used), every thirty seconds.

    If that is your aim, the problem here, is that the intervalID is lost once the event listener is executed. So, you need to maintain the intervalID outside of the listener scope so that you can clear it when that tab changes the URL.

    I have the code below, try this

    var intervalMap = {};
    
    function handleUpdated(tabId, changeInfo, tabInfo) {
        if (changeInfo.url) {
            console.log("Tab: " + tabId + " URL changed to " + changeInfo.url);
    
            if (changeInfo.url.indexOf("https://meet.google.com/?authuser") > -1) {
                console.log("Found URL to reload. Added interval");
                var intervalId = window.setInterval(function () {
                    var code = "window.location.reload(); ";
                    chrome.tabs.executeScript(tabId, { code: code });
                }, 3000);
    
                //Save the intervalId to our map
                intervalMap[tabId] = intervalId;
            } else if (intervalMap[tabId]) {
                //Take interval ID from map and clear it
                console.log("Tab changed to differente URL. Removed interval");
                window.clearInterval(intervalMap[tabId]);
            }
        }
    }
    
    chrome.tabs.onUpdated.addListener(handleUpdated);
    

    Manifest (Version 2)

    {
        "name": "Test",
        "version": "1.0",
        "manifest_version": 2,
        "background": {
            "scripts": ["background.js"]
        },
        "permissions": ["background", "tabs", "https://meet.google.com/*"]
    }
    

    Edit: Have updated the code to add relevant console logs. Added manifest to ensure that required permissions are added