Chrome-Erweiterung Alarme losgehen, wenn Chrome wieder geöffnet wird, nachdem die Zeit abläuft?
Bei der Verwendung von Google Chrome-Erweiterung alarms, wird der alarm ausgelöst, wenn es eingestellt wurde und Chrome geschlossen und wieder geöffnet nach Ablauf der Zeit für den alarm ein.
Wie kann ich das verhindern?
Hier ist ein kleines Codebeispiel zu erklären, was ich meine.
/*
If we perform Browser Action to create alarm, then
close the browser, wait about 2 minutes for the alarm to expire
and then reopen the browser, the alarm will go off and the DoSomething
function will get called twice, once by the onStartup event and once
by the onAlarm event.
*/
chrome.browserAction.onClicked.addListener(function (tab) {
chrome.alarms.create('myAlarm', {
delayInMinutes : 2.0
});
});
chrome.alarms.onAlarm.addListener(function (alarm) {
console.log('Fired alarm!');
if (alarm.name == 'myAlarm') {
createListener();
}
});
chrome.runtime.onStartup.addListener(function () {
console.log('Extension started up...');
DoSomething();
});
function DoSomething() {
alert('Function executed!');
}
Also, wenn Sie Lesen Sie den Kommentar oben in meinem code-Beispiel sehen Sie, was passiert.
Was ich will, obwohl, ist für den alarm zu bekommen gelöscht, wenn der browser geschlossen wird, wie ich will, die DoSomething-Funktion, die ausgeführt werden, nur durch die onStartup-event, wenn der browser gerade begonnen, und damit der alarm führen Sie die DoSomething-Funktion erst, nachdem der browser gestartet wird und mein code erstellt einen neuen alarm.
Ich will nie einen alarm zu bleiben, nachdem der browser geschlossen ist, und führen Sie dann onAlarm, wenn der browser geöffnet wird.
Wie Sie diese erreichen können?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht die Möglichkeit, eine Chrome-Erweiterung, um zuverlässig ausführen von code, wenn der browser geschlossen wird.
Statt der Reinigung beim Herunterfahren, so stellen Sie sicher, dass die alte Alarme werden nicht ausgeführt beim Start. Dies kann erreicht werden durch die Erzeugung einer einzigartigen (für die session) id.
Wenn Sie mit den event-Seiten, speichern Sie den Bezeichner in
chrome.storage.local
(nicht vergessen, diestorage
Berechtigung in der manifest-Datei). Andernfalls, speichern Sie es in den globalen Gültigkeitsbereich.Wenn Sie nicht mithilfe der Ereignis-Seiten, sondern normale hintergrund-Seiten, speichern nur die variable Global (Vorteil: id Lesen/schreiben wird synchron, was benötigt weniger code):
Oder einfach nur die gute alte
setTimeout
zu erreichen das gleiche Ziel, ohne Nebenwirkungen.