Làm cách nào để tiện ích mở rộng có thể phát hiện ra rằng nó đang được chạy lần đầu tiên hoặc mới được cập nhật, để tiện ích mở rộng có thể thực hiện một số hành động cụ thể? (ví dụ: mở trang trợ giúp hoặc cập nhật cài đặt)
Làm cách nào để tiện ích mở rộng có thể phát hiện ra rằng nó đang được chạy lần đầu tiên hoặc mới được cập nhật, để tiện ích mở rộng có thể thực hiện một số hành động cụ thể? (ví dụ: mở trang trợ giúp hoặc cập nhật cài đặt)
Câu trả lời:
Trong các phiên bản Chrome mới hơn (kể từ Chrome 22), bạn có thể sử dụng chrome.runtime.onInstalled
sự kiện, sự kiện này gọn gàng hơn nhiều.
Thí dụ:
// 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 + "!");
}
});
Câu trả lời được cập nhật để phản ánh v3 của tệp kê khai:
Chromium hiện có một bộ API chrome.runtime , cho phép bạn tìm nạp phiên bản của tiện ích.
Để tải phiên bản hiện tại:
chrome.runtime.getManifest().version
Để nghe khi nào tiện ích được cài đặt lần đầu, khi tiện ích được cập nhật lên phiên bản mới và khi Chromium được cập nhật lên phiên bản mới, bạn có thể sử dụng onInstalled
sự kiện.
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;
}
})
Đó là tất cả!
Câu trả lời cũ, trước năm 2011
Nếu bạn muốn kiểm tra xem tiện ích mở rộng đã được cài đặt hoặc cập nhật hay chưa, bạn có thể làm như sau:
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'
... anh ấy đang kiểm tra typeof prevVersion == 'undefined'
. Nó sẽ mạnh mẽ hơn nhiều để sử dụng typeof
khi kiểm tra xem một biến có không được xác định hay không ... hãy xem tại đây để tìm hiểu lý do: stackoverflow.com/a/3550319/130691
May mắn thay, hiện đã có các sự kiện cho việc này (kể từ phiên bản Chrome 22 và 25 cho các sự kiện cập nhật).
Đối với một sự kiện đã cài đặt:
chrome.runtime.onInstalled.addListener(function() {...});
Đối với sự kiện OnUpdateAvailable:
chrome.runtime.onUpdateAvailable.addListener(function() {...});
Một đoạn trích quan trọng về OnUpdateAvailable từ tài liệu dành cho nhà phát triển cho biết:
Được kích hoạt khi có bản cập nhật nhưng không được cài đặt ngay lập tức vì ứng dụng hiện đang chạy. Nếu bạn không làm gì, bản cập nhật sẽ được cài đặt vào lần tiếp theo trang nền được tải xuống, nếu bạn muốn nó được cài đặt sớm hơn, bạn có thể gọi chrome.runtime.reload () một cách rõ ràng.
Đơn giản. Khi phần mở rộng chạy lần đầu tiên, phần mở rộng localStorage
trống. Trong lần chạy đầu tiên, bạn có thể viết một cờ ở đó để đánh dấu tất cả các lần chạy kết quả là không phải lần đầu tiên.
Ví dụ, trong 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!');
CHỈNH SỬA: Để kiểm tra xem tiện ích mở rộng vừa được cập nhật, hãy lưu trữ phiên bản thay vì một cờ đơn giản trong lần chạy đầu tiên, sau đó khi phiên bản tiện ích mở rộng hiện tại (lấy bằng cách XmlHttpRequest
nhập tệp kê khai) không bằng phiên bản được lưu trữ localStorage
, tiện ích mở rộng có đã được cập nhật.
localStorage
thực sự nằm trong cửa sổ riêng biệt của nó và không được chia sẻ với mã và tiện ích mở rộng khác trên trang như @huyz đã đề cập. Đối với phần mở rộng, tuy nhiên, đây không phải là trường hợp.