Açıklama
Kodun düzenli olarak veya gelecekte belirli bir zamanda çalıştırılmasını planlamak için chrome.alarms API'yi kullanın.
İzinler
alarmsbrowser.alarms API'yi kullanmak için manifest dosyasında "alarms" iznini beyan edin:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
Kavramlar ve kullanım
Güvenilir bir davranış sağlamak için API'nin nasıl davrandığını anlamak faydalıdır.
Cihaz uyku modu
Cihaz uyku modundayken alarmlar çalışmaya devam eder. Ancak alarm, cihazı uyandırmaz. Cihaz uyandığında, kaçırılan alarmlar tetiklenir. Tekrarlanan alarmlar en fazla bir kez çalar ve ardından cihazın uyandığı andan itibaren belirtilen süre kullanılarak yeniden planlanır. Alarmın ilk ayarlandığı andan itibaren geçen süre dikkate alınmaz.
Kalıcılık
persistAcrossSessions işaretini kullanarak alarmın oluşturma zamanındaki kalıcılığını kontrol edebilirsiniz. Bu değer true (uzantı güncellenene kadar devam eder) veya false (uzantı yeniden yüklenirse ya da tarayıcı yeniden başlatılırsa ve uzantı her güncellendiğinde temizlenir) olarak ayarlanabilir.
Diğer tarayıcılar ve Chrome'un önceki sürümleri
Bu özellik, diğer tarayıcılarda (sorun) veya Chrome 150'den önceki Chrome sürümlerinde desteklenmez. Bu sürümlerde davranış öngörülemez olabilir. Bu nedenle, hizmet çalışanınız her başlatıldığında önemli alarmların mevcut olduğundan emin olmak en iyisidir. Örneğin:
async function checkAlarmState() {
const alarm = await browser.alarms.get("my-alarm");
if (!alarm) {
await browser.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
Alarmınız kullanıcı işlemine göre dinamik olarak oluşturuluyorsa alarmın başka bir yerde oluşturulduğunu depolayabilirsiniz. Böylece, gerektiğinde alarmı yeniden oluşturabilirsiniz.
Örnekler
Aşağıdaki örneklerde, alarmın nasıl kullanılacağı ve alarma nasıl yanıt verileceği gösterilmektedir. Bu API'yi denemek için chrome-extension-samples deposundan Alarm API örneğini yükleyin.
Alarm kur
Aşağıdaki örnekte, uzantının yeni bir sürümü yüklendiğinde hizmet çalışanında bir alarm ayarlanmaktadır:
service-worker.js:
browser.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await browser.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
Alarmı yanıtlama
Aşağıdaki örnekte, işlem araç çubuğu simgesi, çalan alarmın adına göre ayarlanmaktadır.
service-worker.js:
browser.alarms.onAlarm.addListener((alarm) => {
browser.action.setIcon({
path: getIconPath(alarm.name),
});
});
Türler
Alarm
Özellikler
-
ad
dize
Bu alarmın adı.
-
periodInMinutes
number isteğe bağlı
Boş değilse alarm yinelenen bir alarmdır ve
periodInMinutesdakika sonra tekrar çalar. -
persistAcrossSessions
boole
Chrome 150+Alarmın oturumlar (tarayıcı yeniden başlatmaları) arasında kalıcı olup olmayacağı.
-
scheduledTime
sayı
Bu alarmın çalması için planlanan zaman, milisaniye cinsinden (ör.
Date.now() + n). Performans nedeniyle alarm, bu sürenin ötesinde rastgele bir süre geciktirilmiş olabilir.
AlarmCreateInfo
Özellikler
-
delayInMinutes
number isteğe bağlı
onAlarmetkinliğinin tetiklenmesi için geçmesi gereken süre (dakika cinsinden). -
ad
string isteğe bağlı
Chrome 152+Bu alarmın adı.
-
periodInMinutes
number isteğe bağlı
Ayarlanırsa onAlarm etkinliği,
whenveyadelayInMinutestarafından belirtilen ilk etkinlikten sonra herperiodInMinutesdakikada bir tetiklenir. Ayarlanmazsa alarm yalnızca bir kez çalar. -
persistAcrossSessions
boole isteğe bağlı
Chrome 150+Alarmın oturumlar (tarayıcı yeniden başlatmaları) arasında kalıcı olup olmayacağı. Chrome'da bu değer, geçmişteki davranışla eşleşmesi için varsayılan olarak "true" değerine ayarlanır ancak tarayıcılar arasında uyumluluğu en üst düzeye çıkarmak için bu değeri açıkça ayarlamanız gerekir.
-
ne zaman
number isteğe bağlı
Alarmın çalması gereken zaman, milisaniye cinsinden (ör.
Date.now() + n).
Yöntemler
clear()
browser.alarms.clear(
name?: string,
): Promise<boolean>
Belirtilen ada sahip alarmı siler.
Parametreler
-
ad
string isteğe bağlı
Temizlenecek alarmın adı. Varsayılan olarak boş dize kullanılır.
İadeler
-
Promise<boolean>
Chrome 91 ve sonraki sürümler Chrome 148'den itibaren browser.*
clearAll()
browser.alarms.clearAll(): Promise<boolean | undefined>
Tüm alarmları temizler.
İadeler
-
Promise<boolean | undefined>
Chrome 91 ve sonraki sürümler Chrome 148'den itibaren browser.*
create()
browser.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
Alarm oluşturur. alarmInfo tarafından belirtilen zamanlara yakın bir zamanda onAlarm etkinliği tetiklenir. Aynı ada sahip başka bir alarm varsa (veya ad belirtilmemişse) iptal edilir ve yerine bu alarm kullanılır.
Chrome, kullanıcının makinesindeki yükü azaltmak için alarmları saniyede en fazla bir kez olacak şekilde sınırlandırır ancak rastgele bir süre daha geciktirebilir. Yani delayInMinutes veya periodInMinutes değerinin 1 saniyeden daha kısa bir süreye ayarlanması dikkate alınmaz ve uyarıya neden olur. when, uyarı olmadan "şimdi"den sonraki 1 saniyeden daha kısa bir süreye ayarlanabilir ancak alarmın en az 1 saniye boyunca çalmasına neden olmaz.
Parametreler
-
ad
string isteğe bağlı
Bu alarmı tanımlamak için isteğe bağlı ad. Varsayılan olarak boş dize kullanılır.
-
alarmInfo
Alarmın ne zaman çalacağını açıklar. Başlangıç zamanı
whenveyadelayInMinutesile belirtilmelidir (ancak ikisi birden belirtilmemelidir).periodInMinutesayarlanırsa alarm, ilk etkinlikten sonra herperiodInMinutesdakikada bir tekrarlanır. Tekrarlanan bir alarm içinwhenveyadelayInMinutesayarlanmazsadelayInMinutesiçin varsayılan olarakperiodInMinuteskullanılır.
İadeler
-
Promise<void>
Chrome 111 ve sonraki sürümler Chrome 148'den itibaren browser.*Alarm oluşturulduğunda çözümlenen Promise.
get()
browser.alarms.get(
name?: string,
): Promise<Alarm | undefined>
Belirtilen alarm hakkındaki ayrıntıları alır.
Parametreler
-
ad
string isteğe bağlı
Alınacak alarmın adı. Varsayılan olarak boş dize kullanılır.
İadeler
-
Promise<Alarm | undefined>
Chrome 91 ve sonraki sürümler Chrome 148'den itibaren browser.*
İadeler
-
Promise<Alarm[]>
Chrome 91 ve sonraki sürümler Chrome 148'den itibaren browser.*