इवेंट-ड्रिवन बैकग्राउंड स्क्रिप्ट पर माइग्रेट करें

बैकग्राउंड में चलने वाली ऐसी स्क्रिप्ट लागू करने से, आपके एक्सटेंशन के लिए ज़्यादा संसाधनों की ज़रूरत नहीं पड़ेगी. एक्सटेंशन की ज़्यादातर सुविधाएं, इवेंट के आधार पर काम करने वाली बैकग्राउंड स्क्रिप्ट पर काम कर सकती हैं. किसी एक्सटेंशन को सिर्फ़ असामान्य परिस्थितियों में बैकग्राउंड में चलने की अनुमति दी जानी चाहिए. ऐसा इसलिए, क्योंकि वे लगातार सिस्टम के रिसॉर्स का इस्तेमाल करते हैं और कम क्षमता वाले डिवाइसों पर असर डाल सकते हैं.

बैकग्राउंड में लगातार चलने वाली स्क्रिप्ट को इवेंट पर आधारित, लगातार नहीं चलने वाले मॉडल पर माइग्रेट करके, एक्सटेंशन की परफ़ॉर्मेंस को बेहतर बनाएं. डिफ़ॉल्ट रूप से, "persistent" को 'सही' पर सेट किया जाता है.

परसिस्टेंस को 'गलत' के तौर पर मार्क करना

एक्सटेंशन की manifest फ़ाइल में "background" बटन ढूंढें. इसके बाद, "persistent" फ़ील्ड को जोड़ें या उसे 'गलत' पर अपडेट करें.

{
  "name": "My extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

यही बात बैकग्राउंड स्क्रिप्ट पर भी लागू होती है, जो एचटीएमएल फ़ाइल का इस्तेमाल करती हैं.

{
  "name": "My extension",
  ...
  "background": {
    "page": "background.html",
    "persistent": false
  },
  ...
}

Surface इवेंट लिसनर

किसी अहम इवेंट के ट्रिगर होने पर, बैकग्राउंड स्क्रिप्ट को चालू करने के लिए लिसनर को टॉप-लेवल पर होना चाहिए. रजिस्टर किए गए दर्शकों को सिंक्रोनस पैटर्न में फिर से व्यवस्थित करना पड़ सकता है. नीचे दिए गए तरीके से, ऑडियंस को व्यवस्थित करने पर, उन्हें ट्रिगर नहीं किया जा सकेगा. ऐसा इसलिए, क्योंकि उन्हें एक साथ रजिस्टर नहीं किया गया है.

chrome.storage.local.get('runtimeEvents', function (events) {
  for (let event of events)
    chrome.runtime[event].addListener(listener);
});

इसके बजाय, लिसनर को टॉप-लेवल पर रखें और नेस्ट न करें.

chrome.runtime.onStartup.addListener(function() {
  // run startup function
})

स्टोरेज में स्थिति में हुए बदलावों को रिकॉर्ड करना

स्थितियों और वैल्यू को सेट करने और दिखाने के लिए, storage API का इस्तेमाल करें. कंप्यूटर पर ऐप्लिकेशन अपडेट करने के लिए, local.set का इस्तेमाल करें.

  chrome.storage.local.set({ variable: variableInformation });

उस वैरिएबल की वैल्यू पाने के लिए, local.get का इस्तेमाल करें.

chrome.storage.local.get(['variable'], function(result) {
  let awesomeVariable = result.variable;
  // Do something with awesomeVariable
});

टाइमर को अलार्म में बदलें

अगर window.setTimeout() या window.setInterval() जैसे डीओएम-आधारित टाइमर, इवेंट पेज के बंद होने पर ट्रिगर होते हैं, तो उन्हें बैकग्राउंड में चलने वाली स्क्रिप्ट में शामिल नहीं किया जाता.

let timeout = 1000 * 60 * 3;  // 3 minutes in milliseconds
window.setTimeout(function() {
  alert('Hello, world!');
}, timeout);

इसके बजाय, alarms API का इस्तेमाल करें.

chrome.alarms.create({delayInMinutes: 3.0})

इसके बाद, किसी दर्शक को जोड़ें.

chrome.alarms.onAlarm.addListener(function() {
  alert("Hello, world!")
});

बैकग्राउंड स्क्रिप्ट फ़ंक्शन के लिए कॉल अपडेट करना

अगर बैकग्राउंड पेज से किसी फ़ंक्शन को कॉल करने के लिए extension.getBackgroundPage का इस्तेमाल किया जा रहा है, तो इसे runtime.getBackgroundPage पर अपडेट करें. नया तरीका, स्क्रिप्ट को वापस करने से पहले, उसे चालू करता है.

function backgroundFunction() {
  alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
  chrome.extension.getBackgroundPage().backgroundFunction();
});

अगर बैकग्राउंड स्क्रिप्ट बंद है, तो यह तरीका काम नहीं करेगा. यह ऐसी स्क्रिप्ट के लिए डिफ़ॉल्ट स्थिति होती है जो लगातार काम नहीं करती. नए तरीके में कॉलबैक फ़ंक्शन शामिल होता है, ताकि यह पक्का किया जा सके कि बैकग्राउंड स्क्रिप्ट लोड हो गई है.

document.getElementById('target').addEventListener('click', function() {
  chrome.runtime.getBackgroundPage(function(backgroundPage){
    backgroundPage.backgroundFunction()
  })
});