如何让chrome扩展在页面加载的后台执行功能

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

本文关键字:加载 后台 执行 功能 chrome 扩展      更新时间:2023-12-14

我正在制作一个chrome扩展来登录wifi系统,目前已经设置好了,他们必须点击该扩展才能登录。但我希望它每30分钟登录一次,使用后台js,我希望它检查我保存的cookie,如果30分钟过去了,然后登录。但它只有在你第一次安装它时才有效。

这是我的宣言.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"
  }
}

这是我的背景.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();
        }
    });
});

您只在页面加载时调用该函数,因此难怪之后它不会执行。如果你想定期执行一个操作,你可以使用chrome.alarms API创建一个警报每30分钟触发一次(除非你也将其用于其他事情,否则你甚至不需要cookie)。

例如:

var wifiAlarmName = "wifiSignIn";
chrome.alarms.create(wifiAlarmName, {
    delayInMinutes: 0,
    periodInMinutes: 30
});
chrome.alarms.onAlarm.addListener(function(alarm) {
    if (alarm.name === wifiAlarmName) {
        // Sign in
        ...
    }
});