user1457388
user1457388

Reputation: 211

How to get chrome extensions to perform function in background on page load?

I am making a chrome extension to sign into a wifi system, and currently have it set so that they must click on the extension to sign in. But instead I want it to just sign them in every 30 minutes, using background js I want it to check a cookie I saved if 30 minutes has passed and then sign in. But instead it only works when you first install it.

Here is my manifest.json:

{
  "manifest_version": 2,

  "name": "BCA Auto Login",
  "description": "This extension automatically signs you into the BCA wifi",
  "version": "1.0",
  "permissions": [ "cookies", "http://*/*", "https://*/*" ],
  "content_scripts": [{
    "matches": ["http://*/*","https://*/*"],
    "js": ["jquery.js","login.js"]
  }],
  "background": {
    "scripts": ["jquery.js", "background.js"]
  },
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  }

}

Here is my background.js:

$(document).ready(function(){
    chrome.cookies.get({ url: 'urlofCookie.com', name: 'time' },
    //the cookie is a time in minutes
    function (cookie) {
        if (cookie) {
            var current = new Date();
            if((current.getMinutes() - cookie) >= 30){
                $.ajax({
                    type : 'POST',
                    url : 'https://signinURL',
                    data : {
                        username: 'username',
                        password: 'password',
                    },
                    success : workedFunction
                });
            }
        }
        else{
            cookieNotFound();
        }
    });
});

Upvotes: 1

Views: 1399

Answers (1)

gkalpak
gkalpak

Reputation: 48212

You only call the function on page load, so no wonder it does not execute after that. If you want to perform an action periodically, you can use the chrome.alarms API and create an alarm to fire every 30 minutes (you don't even need the cookie unless you use it for other things as well).

E.g.:

var wifiAlarmName = "wifiSignIn";

chrome.alarms.create(wifiAlarmName, {
    delayInMinutes: 0,
    periodInMinutes: 30
});

chrome.alarms.onAlarm.addListener(function(alarm) {
    if (alarm.name === wifiAlarmName) {
        // Sign in
        ...
    }
});

Upvotes: 6

Related Questions