Chrome扩展程序 - Chrome启动时执行代码

时间:2015-04-21 14:37:45

标签: jquery google-chrome-extension getjson

我正在开发Chrome扩展程序,我正在研究如何在Chrome启动时执行代码。

我有这些文件:

script.js
index.html
manifest.json

在script.js中我有:

$(document).ready(function() {
    $.getJSON("https://api.twitch.tv/kraken/streams/"+"NameOfStreamer",function(c) {
        if (c.stream == null) {
            ...
        } else {
            ...
        }
    });
});

我想在HTML完成渲染时执行此代码,但是当Chrome首先启动时,然后每分钟重新运行一次。

这与$(document).ready()的想法相同,但在Chrome启动时执行。

2 个答案:

答案 0 :(得分:3)

请先阅读Architecture Overview。这不是一篇长文,但非常重要。

弹出窗口只有在打开时才存在;没有代码可以运行,而不是。

background page是解决方案:它是Chrome启动后立即创建的不可见页面,并会在Chrome的整个生命周期内继续运行。


实现:

在您的清单中,声明您的后台脚本(按加载顺序):

"background" : {
  "scripts": ["jquery.js", "background.js"]
},

Chrome启动后会立即运行代码。不需要$(document).ready包装器:

$.getJSON("https://api.twitch.tv/kraken/streams/"+"NameOfStreamer", function(c) {
  /* ... */
});

如果您需要重复此操作,可以使用chrome.alarms API或简单DOM intervals

getData();
setInterval(getData, 60000); // Once every minute

function getData() {
  $.getJSON("https://api.twitch.tv/kraken/streams/"+"NameOfStreamer", function(c) {
    /* ... */
  });
}

解决了获取更新数据的问题。但背景页面是不可见的。如果要显示数据,可以使用browserAction弹出窗口。

这样,您可以将扩展分为处理数据的部分(背景)和显示它的弹出窗口。

你必须以某种方式从背景中请求数据;对于此问题,如何执行此操作过于宽泛,但您可以使用Messaging API或使用chrome.runtime.getBackgroundPage()直接访问后台页面。您还可以将数据存储在chrome.storage中,可以从弹出窗口访问。这可能不是一个详尽的清单。

或者,根据您的需要,您可能需要查看notifications

答案 1 :(得分:0)

您需要使用onCreated事件铬:

chrome.windows.onCreated.addListener(function() {
    //do stuff
});

<强> Docs for event onCreated