Chrome 扩展 - 在 Chrome 启动时执行代码

Chrome Extension - Execute code when Chrome Starts

我正在开发 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启动时执行。

您需要使用 onCreated chromium 事件:

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

Docs for event onCreated

请先阅读 Architecture Overview。文章不长,但非常重要。

弹出窗口只在打开时存在; 运行 没有代码。

A background page 是解决方案:它是一个不可见的页面,一旦 Chrome 启动并在 Chrome 的整个生命周期中继续 运行ning。


实施:

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

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

一旦 Chrome 启动,代码将是 运行。不需要 $(document).ready 包装器:

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

如果需要重复,可以使用chrome.alarms API or simply DOM intervals:

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

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

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

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

你将不得不以某种方式从后台请求数据;如何做到这一点对于这个问题来说太宽泛了,但是你可以使用 Messaging API or directly access the background page with chrome.runtime.getBackgroundPage(). You could also store the data in chrome.storage,可以从弹出窗口访问。这可能不是一个详尽的清单。

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