Если вы можете жить без проверки обновлений, этот сценарий должен работать (сравните с соответствующей Chrome ответа):
// In background page
function onInstall() {
console.log('Extension installed');
}
var firstRun = typeof localStorage['extensionHasPreviouslyRun'] === 'undefined' ||
!JSON.parse(localStorage['extensionHasPreviouslyRun']);
if (firstrun) {
onInstall();
localStorage['extensionHasPreviouslyRun'] = JSON.stringify(true);
}
Если вы хотите, чтобы проверить наличие обновлений и, необходимо асинхронно получить версию от файл PLIST, как это:
// In background page
function onInstall() {
console.log('Extension installed');
}
function onUpdate() {
console.log('Extension update');
}
function requestVersion(callback) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'info.plist');
xmlhttp.onload = function() {
var infoFile = xmlhttp.responseXML;
var keys = infoFile.getElementsByTagName('key');
for (var i = 0; i < keys.length; i++){
if (keys[i].firstChild.data === 'CFBundleShortVersionString'){
var version = keys[i].nextElementSibling.firstChild.data;
callback(version);
break;
}
}
}
xmlhttp.send();
}
requestVersion(function(version) {
var storedVersion = localStorage['version'];
if (storedVersion !== version) {
// Check if we just installed this extension.
if (typeof storedVersion === 'undefined') {
onInstall();
} else {
onUpdate();
}
localStorage['version'] = version;
}
});
К сожалению. Я пропустил, что localStorage обрабатывает только строки, поэтому мы должны компенсировать это при работе с булевыми вершинами в самом верхнем примере, например, путем введения JSON.parse и JSON.stringify. Ответ обновлен. – Claudijo