我正在开发一个需要使用chrome.alarms的Chrome扩展程序。问题是警报没有被触发或者是由于行为非常不一致而被触发。
根据 Manifest v2 中的建议,扩展是基于事件页面中的对象构建的。此外,我在扩展程序中有标签事件,有时唤醒 事件页。
请帮我创建 chrome.alarm ,实际上大约每隔 n 分钟触发一次,或者向我解释我做错了什么,或者建议替代方案。< / p>
下面,您可以找到相关的代码片段。
的manifest.json
{
"manifest_version": 2,
"browser_action": {
"default_popup": "index.html"
},
"permissions": [
"<all_urls>",
"storage",
"tabs",
"alarms"
],
"background": {
"scripts": [
"js/backend/monitor.js",
"js/backend/bootstrap.js"
],
"persistent": false
}
}
bootstrap.js
// Exaggerating with the validation on purpose
chrome.alarms.get('timeToSendToApi', function(alarm) {
if (typeof alarm === 'undefined' || alarm.name !== 'timeToSendToApi') {
chrome.alarms.create('timeToSendToApi', {periodInMinutes: 2});
}
});
Main.monitor.start();
monitor.js
Main.monitor = (function() {
function send() {
// Do stuff
}
function tabUpdatedHandler(tabId, changeInfo, tab) {
// Do stuff
}
function tabActivatedHandler(activeInfo) {
// Do stuff
}
function focusLost() {
// Do stuff
}
function start(callback) {
chrome.tabs.onUpdated.addListener( tabUpdatedHandler );
chrome.tabs.onActivated.addListener( tabActivatedHandler );
chrome.windows.onFocusChanged.addListener( focusLost );
chrome.alarms.onAlarm.addListener(function(alarm) {
if(alarm.name === 'timeToSendToApi') {
send();
}
});
}
return {
start: start
};
}());
答案 0 :(得分:3)
您可能已经遇到了我们刚刚在代码中发现的问题。大约四个月前,我们现在理解的a change landed可能会导致您所看到的行为。鉴于你在11月份看到这个,你可能在开发或金丝雀频道。
对不起麻烦;我们将尽快得到这个固定的,并可能合并到更广泛的渠道中。