एक एक्सटेंशन कैसे पता लगा सकता है कि यह पहली बार चलाया जा रहा है या बस अपडेट किया गया है, ताकि एक्सटेंशन कुछ विशिष्ट कार्यों को कर सके? (उदाहरण के लिए मदद पृष्ठ खोलें या सेटिंग अपडेट करें)
जवाबों:
Chrome के नए संस्करणों में (Chrome 22 के बाद से), आप chrome.runtime.onInstalled
ईवेंट का उपयोग कर सकते हैं , जो बहुत अधिक क्लीनर है।
उदाहरण:
// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
if(details.reason == "install"){
console.log("This is a first install!");
}else if(details.reason == "update"){
var thisVersion = chrome.runtime.getManifest().version;
console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
}
});
प्रकट होने के v3 को दर्शाने के लिए अद्यतित उत्तर:
क्रोमियम में अब एपीआई का क्रोम सेट है, जो आपको एक्सटेंशन के संस्करण को लाने की अनुमति देता है।
वर्तमान संस्करण प्राप्त करने के लिए:
chrome.runtime.getManifest().version
यह सुनने के लिए कि एक्सटेंशन को पहली बार इंस्टॉल किया गया है, जब एक्सटेंशन को नए संस्करण में अपडेट किया गया है, और जब क्रोमियम को नए संस्करण में अपडेट किया गया है, तो आप onInstalled
ईवेंट का उपयोग कर सकते हैं ।
chrome.runtime.onInstalled.addListener((details) => {
const currentVersion = chrome.runtime.getManifest().version
const previousVersion = details.previousVersion
const reason = details.reason
console.log('Previous Version: ${previousVersion }')
console.log('Current Version: ${currentVersion }')
switch (reason) {
case 'install':
console.log('New User installed the extension.')
break;
case 'update':
console.log('User has updated their extension.')
break;
case 'chrome_update':
case 'shared_module_update':
default:
console.log('Other install events within the browser')
break;
}
})
बस इतना ही!
पुराना उत्तर, 2011 से पहले
यदि आप जांचना चाहते हैं कि क्या एक्सटेंशन स्थापित या अपडेट किया गया है, तो आप कुछ इस तरह से कर सकते हैं:
function onInstall() {
console.log("Extension Installed");
}
function onUpdate() {
console.log("Extension Updated");
}
function getVersion() {
var details = chrome.app.getDetails();
return details.version;
}
// Check if the version has changed.
var currVersion = getVersion();
var prevVersion = localStorage['version']
if (currVersion != prevVersion) {
// Check if we just installed this extension.
if (typeof prevVersion == 'undefined') {
onInstall();
} else {
onUpdate();
}
localStorage['version'] = currVersion;
}
prevVersion == 'undefined'
... वह जाँच कर रहा है typeof prevVersion == 'undefined'
। यह typeof
जाँचने के लिए अधिक मजबूत है कि अगर कोई चर अपरिभाषित है तो जाँच करें ... जानने के लिए यहाँ देखें: stackoverflow.com/a/3550319/130691
सौभाग्य से, अब इसके लिए इवेंट हैं (चूंकि क्रोम संस्करण 22, और अपडेट घटनाओं के लिए 25)।
एक स्थापित घटना के लिए:
chrome.runtime.onInstalled.addListener(function() {...});
एक OnUpdateAvailable घटना के लिए:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
डेवलपर डॉक्स से OnUpdateAvailable के बारे में एक महत्वपूर्ण अंश कहता है:
अपडेट उपलब्ध होने पर निकाल दिया जाता है, लेकिन तुरंत इंस्टॉल नहीं किया जाता क्योंकि ऐप वर्तमान में चल रहा है। यदि आप कुछ नहीं करते हैं, तो अगली बार बैकग्राउंड पेज अनलोड होने पर अपडेट इंस्टॉल हो जाएगा, अगर आप चाहते हैं कि इसे जल्द ही इंस्टॉल किया जाए तो आप स्पष्ट रूप से chrome.runtime.reload () कह सकते हैं।
सरल। जब विस्तार पहले चलता है, तो localStorage
खाली है। पहले भाग में, आप सभी गैर-प्रथम के रूप में सभी परिणामी रन को चिह्नित करने के लिए वहां एक झंडा लिख सकते हैं।
उदाहरण के लिए, background.htm में:
var first_run = false;
if (!localStorage['ran_before']) {
first_run = true;
localStorage['ran_before'] = '1';
}
if (first_run) alert('This is the first run!');
संपादित करें: यह जांचने के लिए कि क्या एक्सटेंशन अभी-अभी अपडेट किया गया है, पहले रन पर एक साधारण ध्वज के बजाय संस्करण को स्टोर करें, फिर जब वर्तमान एक्सटेंशन संस्करण (इसे XmlHttpRequest
आईएनजी द्वारा मैनिफ़ेस्ट प्राप्त करें) में संग्रहीत एक के बराबर नहीं है localStorage
, तो एक्सटेंशन में है अद्यतन किया गया।
localStorage
जो वास्तव में अपनी अलग विंडो में है और पेज पर अन्य कोड और एक्सटेंशन के साथ साझा नहीं किया गया जैसा @huyz ने उल्लेख किया है। एक्सटेंशन के लिए, हालांकि, ऐसा नहीं है।