javascriptjquerygoogle-chrome-extension

Chrome Alarm events keeps firing every 4 seconds


I am trying to pass a message triggered by an alarm from background.js to loader.js. Here is my code:

manifest.json:

{
"update_url": "https://clients2.google.com/service/update2/crx",

   "manifest_version": 2,
   "name": "DubX",
   "short_name": "DubX",
   "author": "Al3366",
   "description": "Automatically loads DubX on dubtrack.fm",
   "homepage_url": "https://dubx.net/",
   "version": "0",
   "browser_action": {
    "default_icon": "icons/48.png"
   },
   "permissions": ["background","alarms","tabs"],
   "background": {
      "scripts": ["background.js"],
      "persistent": false
    },
   "content_scripts": [{
      "matches": ["*://www.dubtrack.fm/*"],
      "js": ["jquery.js","loader.js"],
      "run_at": "document_end"
   }],

    "icons": { 
        "16": "icons/16.png",
        "19": "icons/19.png",
        "38": "icons/38.png",
        "48": "icons/48.png",
        "128": "icons/128.png" 
    }
}

background.js

chrome.alarms.create('hello',{delayInMinutes: 0.25});
chrome.alarms.onAlarm.addListener(function(alarm) {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        var content = {greeting: 'foo'};
        chrome.tabs.sendMessage(tabs[0].id, content);  
    });
});

loader.js:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting === 'foo') {
            hello();
        };
    }
);
$('body').prepend('<div class="cake" style=" z-index: 2147483647; color: white; position: fixed; bottom: 54px; left: 27px; background: #222; padding: 13px; -webkit-box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.75); -moz-box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.75); box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.75); border-radius: 5px;">Waiting for Dubtrack...</div>');
function hello() {
    $.getScript('https://rawgit.com/sinfulBA/DubX-Script/master/beta.js');
    $('.cake').remove();
};

It keeps firing the hello(); function every 4 seconds. I can't find out what I'm doing wrong. Thanks in advance for your reply.


Solution

  • You're using an event page (non-persistent background page), which is unloaded after approximately 5 seconds of inactivity. Then some activity in the browser causes the background page to re-initialize and set a new alarm. So each 5 seconds that new alarm fires the handler that sends a message which makes the content script call hello().