ส่วนขยายจะทราบได้อย่างไรว่ามีการเรียกใช้เป็นครั้งแรกหรือเพิ่งได้รับการอัปเดตเพื่อให้ส่วนขยายสามารถดำเนินการบางอย่างได้ (เช่นเปิดหน้าช่วยเหลือหรืออัปเดตการตั้งค่า)
ส่วนขยายจะทราบได้อย่างไรว่ามีการเรียกใช้เป็นครั้งแรกหรือเพิ่งได้รับการอัปเดตเพื่อให้ส่วนขยายสามารถดำเนินการบางอย่างได้ (เช่นเปิดหน้าช่วยเหลือหรืออัปเดตการตั้งค่า)
คำตอบ:
ใน 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 ของรายการ:
ตอนนี้ Chromium มีชุด API ของchrome.runtimeซึ่งช่วยให้คุณสามารถดึงข้อมูลเวอร์ชันของส่วนขยายได้
ในการรับเวอร์ชันปัจจุบัน:
chrome.runtime.getManifest().version
หากต้องการฟังเมื่อติดตั้งส่วนขยายครั้งแรกเมื่อส่วนขยายได้รับการอัปเดตเป็นเวอร์ชันใหม่และเมื่ออัปเดต Chromium เป็นเวอร์ชันใหม่คุณสามารถใช้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
โชคดีที่มีเหตุการณ์นี้ (ตั้งแต่ Chrome เวอร์ชัน 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
การติดตั้งไฟล์ Manifest) ไม่เท่ากับlocalStorage
ส่วนขยายที่เก็บไว้ส่วนขยายจะมี ได้รับการปรับปรุง
localStorage
อยู่ในหน้าต่างแยกต่างหากและไม่ได้แชร์กับโค้ดและส่วนขยายอื่น ๆ บนเพจดังที่ @huyz กล่าวถึง อย่างไรก็ตามสำหรับส่วนขยายจะไม่เป็นเช่นนั้น